我有以下要求,我有三个异步函数async1(),async2(),ascync3()都返回promise
现在,我将调用一个函数并分别依次执行async1,async2,async3,我想打印async3之后返回的已解决的promise
这是我的主要功能
testPromiseSerially = function() {
return new promise(function(resolve,reject) {
async1().
then(function(result1) {
return async2(result1)
})
.then(function(result2){
return async3(result2)
})
.catch(function(err) {
return reject(err)
}
})
}
这是我的async3函数
async3 = function(params) {
return new promise(function(resolve,reject) {
return resolve("solved")
})
}
和async1和async2也类似于async3
如果我执行这段代码
testPromiseSerially.then(function(result) {
console.log(result)
})
.catch(function (err) {
console.log(err)
})
testPromiseSerially被调用,但未输入'then'或'catch'
阻止.async3返回的诺言是否不会中继回testpromiseSerially()?
我如何看到async3的结果?
我知道如果我像添加一样扩展代码
.then(function(result) {
return resolve(result)
})
在async3(result)之后,我将能够看到结果。但是我有一系列功能取决于其他功能返回的承诺,那么我该如何处理呢?
最佳答案
主要问题是您的testPromiseSerially
代码从不调用resolve
。因此,它返回的承诺永远不会解决。
由于其测试已经很有希望,因此您无需创建新的。每次调用then
都会产生一个新的承诺,因此只需使用它即可。
此外,这:
.then(function(result1) {
return async2(result1);
})
比您需要的更为复杂/冗长,它可能只是:
.then(async2)
与
.catch
相同。所以:
let testPromiseSerially = function() {
return async1()
.then(async2)
.then(async3);
};
Example using JavaScript's native promises on Babel's REPL