javascript - 从对象创建异步 waterfall

标签 javascript node.js asynchronous async-await async.js

假设我有一个具有异步方法的对象数组:

[
  {
    partOne: function(input) {
      // Do something async
    },
    partTwo: function(result) {
      // Do something w/ result of partOne
    }
  },
  {
    partOne: function(resultOfPrevious) {
      // Do something async
    },
    partTwo: function(result) {
      // Do something w/ result of partOne
    }
  },
  {
    partOne: function(resultOfPrevious) {
      // Do something async
    },
    partTwo: function(result) {
      // Do something w/ result of partOne
    }
  }
]

我想用我的输入执行第一个对象的partOne,将结果(异步)传递给partTwo回调,然后将partTwo的结果作为输入传递给下一个对象的partOne,依此类推。该数组可以是一个或多个对象。我想知道执行此类代码的最佳模式是什么?

有点类似于async.js的 waterfall 方法:https://caolan.github.io/async/docs.html#waterfall ,但我想知道如何在没有库的情况下使用更清晰的代码来做到这一点?

不确定 async/await 是否有帮助?

最佳答案

使用async/await的另一种选项,无需收集对数组的每个回调:

async function processWaterfallObject (data, input) {
  let result = input

  for (let entry of data) {
     result = await entry.partOne(result)
     result = await entry.partTwo(result)
  }

  return result
}

这假设 data 数组中的函数是 async 或返回 Promise

<小时/> every major browser 目前支持

async/await7.6.0 起可在 node 中使用。

关于javascript - 从对象创建异步 waterfall ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46582728/

相关文章:

javascript - Node.js/Express.js 应用程序仅适用于端口 3000

node.js - 在 TypeScript 中编写一个 Node 模块以供 TS 和 JS 项目使用

java - 在应用程序运行期间动态地将事件/值推送到 Flux

javascript - node.js 是否在主线程中运行异步文件读取/写入?

javascript - 如何从对象数组创建 TreeView 表 - Javascript

javascript - 将数据从一个 jsp 页面传递到另一个 jsp 页面

javascript - V8 是否对作用域的各个部分进行垃圾回收?

ios - NSURLConnection 和 sendAsynchronousRequest :queue:completionHandler: - does the completion block run in the main thread

javascript - 将react-router链接包装在html按钮中作为提交选项

javascript - 使用 Web Audio API 改变音频速度而不改变音高