我有以下要求,我有三个异步函数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

09-06 01:49