javascript - 将 Node 异步代码转换为 Promise

标签 javascript node.js promise when-js

我正在尝试 Promise - 即when.js - 并且想要转换一些测试代码 - 即使在阅读文档后也不清楚如何做到这一点。到目前为止,我的实验比标准回调金字塔要困惑得多,所以我认为我错过了一些捷径。

这是我想要复制的示例代码:

Async1(function(err, res) {
  res++;
  Async2(res, function(error, result) {
    done();
  })
})

最佳答案

nodefn.call(Async2, nodefn.call(Async1)).ensure(done);

这里,Async2 实际上是同步调用的,并以 Async1() 的 Promise 作为参数 - 它不会等待 Async1解决。要链接它们,您需要使用

nodefn.call(Async1).then(nodefn.lift(Async2)).ensure(done);
// which is equivalent to:
nodefn.call(Async1).then(function(result) {
    return nodefn.call(Async2, result);
}).ensure(done);

I want to perform some logic between the 2 calls

然后您需要在链中放置另一个函数,或者修改链中的函数之一:

nodefn.call(Async1)
  .then(function(res){return res+1;}) // return modified result
  .then(nodefn.lift(Async2))
  .ensure(done);
// or just
nodefn.call(Async1).then(function(res) {
    res++; // do whatever you want
    return nodefn.call(Async2, res);
}).ensure(done);

关于javascript - 将 Node 异步代码转换为 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17453488/

相关文章:

javascript - Node.js 是应用程序未在指定端口上监听

javascript - 获取文件夹外的文件路径

javascript - 在 for 循环中使用 Promise

javascript - 如何将 Promise.all() 限制为每秒 5 个 promise ?

javascript - Meteor Subscribe 不适用于 router.current().params

javascript - 如何在三 Angular 形多维数组中填充数字?

javascript - 如何修复简单的 Javascript 下拉错误?

javascript - 在 for 循环内发出 GET 请求

javascript - 为什么使用 webpack 来打包运行在 node 环境下的应用

javascript - 循环使用本地 promise ;