javascript - Promise 可以在 Node 中转发吗

标签 javascript node.js asynchronous promise q

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

Example using JavaScript's native promises on Babel's REPL

关于javascript - Promise 可以在 Node 中转发吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36768168/

相关文章:

javascript - 从右到左增加或增加 div 标签的宽度

javascript - JavaScript 中的 CSS 溢出检测

node.js - 如何单击此链接进入下一页? [复制]

android - 如何在 Android 中实现 "fire-and-forget"异步调用?

javascript - 如何创建一个等待另一个模板的 onRendered 事件的方法?

Python Tornado 使用协程并行请求并处理异常

javascript - Jquery 点击事件在移动设备上不起作用

javascript - DateJS - 不包括周末

javascript - AWS SAM 本地 start-api : Set lambda nodejs 12. x 标志(例如 --experimental-modules)?

node.js - 数组中 graphql 对象类型的 GraphQL 字段