node.js - 混合异步操作(回调和 promise )完成后如何执行任务?

标签 node.js asynchronous callback promise

我正在编写一些 Nodejs 应用程序。我的应用程序对某些 npm 模块有一些依赖。

在一个任务中,会涉及到两个异步操作,这两个异步操作的形式是callback和promise。下面我放了一些示例代码:

// the task which should be performed after async operation
var myTask = function(){
  // do something
}

// first async operation in the form of callback
cbapi(myTask)

// second async operation in the form of promise
promiseapi()
.then(myTask)

在上面的例子中,当第一个异步操作和第二个异步操作完成时,myTask将执行两次。但我想要的是仅在两个异步操作完成后才执行一次。

有什么办法可以做到吗?

最佳答案

正如@esaukuha所建议的,您应该 promise 您的回调 API,然后使用它们。

new Promise((resolve, reject) => 
  cbapi((err, result) => {
    if (err) reject(err);
    else resolve(result);
  })
)
  .then(myTask) // ... chain

我有一个小npm module就是为了这个。

import fromCallback from 'promise-cb/from';
fromCallback(cb => cbapi(cb))
  .then(myTask) // ... chain

关于node.js - 混合异步操作(回调和 promise )完成后如何执行任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35524024/

相关文章:

javascript - Node Express 中的并行异步路由器

javascript - 所有 Node "callback"函数都可能是异步的吗?

python - Tkinter 回调中的奇怪异常

android - 使用自定义 ConnectionService 和 PhoneAccount 时拨出电话不会响铃

node.js - Angular 在 firestore 中添加新文档而无需列表

node.js - 使用 NodeJS 评估 MongoDB 查询

c# - Async/Await VS Task.Run : When to use ? 如何使用?

java - 异步服务中的 Spring 请求范围?通过 threadLocal 变量实现 ThreadScope,加上一个 AsyncAspect 来清理

c# - 等待杀死进程

arrays - 如何将指针/数组作为参数传递给 GTK 回调函数?