我有以下要求,我有三个异步函数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” block.async3 返回的 Promise 是否没有转发回 testpromiseSerially()? 如何查看 async3 的结果? 我知道如果我扩展我的代码,例如添加
.then(function(result) {
return resolve(result)
})
在 async3(result) 之后我就能看到结果。但是我有一系列函数依赖于其他函数返回的 promise ,那么我该如何处理呢?
最佳答案
主要问题是您的 testPromiseSerially
代码从未调用 resolve
。所以它返回的 promise 永远不会得到解决。
由于它正在测试的内容已经有 promise ,因此您无需创建新的 promise 。每次调用 then
都会产生一个新的 Promise,所以只需使用它即可。
此外,这个:
.then(function(result1) {
return async2(result1);
})
比您需要的更复杂/详细,它可能只是:
.then(async2)
.catch
也是如此。
所以:
let testPromiseSerially = function() {
return async1()
.then(async2)
.then(async3);
};
关于javascript - Promise 可以在 Node 中转发吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36768168/