gpt4 book ai didi

javascript - 如果有其他 promise

转载 作者:行者123 更新时间:2023-12-03 04:54:22 25 4
gpt4 key购买 nike

我尝试使用 Promise 的回调来重构代码,但我从 Promise(bluebird) 中得到了一些奇怪的行为

这是主要逻辑

function func1(callback) {
func2()
.then(function(resultFromFunc2) {
if (resultFromFunc2 === true) {
callback(null, resultFromFunc2)
} else {
return func3()
}
})
.then(function(resultFromFunc3) {
console.log('Func 3', resultFromFunc3)
callback(null, resultFromFunc3)
})
.catch(function(err) {
console.log('error', err)
})
}

func1(function(err, result) {
console.log('func1', err, result);
})

以及func2func3只是一个简单的解决

function func2() {
return new Promise((resolve, reject) => {
resolve(true)
});
}

function func3() {
return new Promise((resolve, reject) => {
resolve(true)
});
}

如果func2解决true代码应该在第一个 then 中停止运行,但我发现第二个 then 被调用

这是终端的结果。

func1 null true
Func 3 undefined
func1 null undefined

func2 时,我怎么能停止调用第二个呢?是解决true

最佳答案

@Phattahana,只是发表我对你的问题的想法。

正如您在回答中所说,您不应该从一开始就调用 callback() 。否则,您应该准备好更改工作流程并删除2nd then。有很多可能性。

在特定场景中,您希望像您发布的问题一样执行代码(即;如果 if 条件 为真,请勿调用第二个 then - 场景),您可以你的代码如下。

var Promise = require("bluebird");
function func1(callback) {
func2()
.then((resultFromFunc2) => {
return new Promise((resolve, reject) => {
if (resultFromFunc2 === true) {
callback(null, resultFromFunc2);
} else {
resolve(func3());
}
});
}).then((resultFromFunc3) => {
console.log('Func 3', resultFromFunc3)
callback(null, resultFromFunc3)
}).catch((err) => {
console.log('error', err)
});
}

func1((err, result) => {
console.log('func1', err, result);
return 1;
});

function func2() {
return new Promise((resolve, reject) => {
resolve(false)
});
}

function func3() {
return new Promise((resolve, reject) => {
resolve(true)
});
}

1st then 中的代码应该被制作成一个单独的 Promise 解析函数,并且只有在条件不满足时才应该解析它。

希望它清楚。

谢谢

关于javascript - 如果有其他 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42503459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com