将节点异步代码转换为promise
Converting node async code to promises
我正在尝试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);
我想在两个调用之间执行一些逻辑
然后你需要在链中放入另一个函数,或者修改链中的一个函数:
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);
不确定何时,但使用Deferred库,您可以这样做:
// One time configuration of promise versions
async1 = promisify(async1);
async2 = promisify(async2);
// construct flow
async1().then(function (res) { return async2(++res); }).done();
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- 将一个方法转换为promise:Nodejs
- Ember.js:将Em.$.getJSON转换为promise并将响应绑定到控制器上下文的正确方法
- 使用回调hell将构建转换为promise hell
- 如何在将Node异步函数转换为promise时使用Q库
- 在nodejs中将回调转换为promise
- 如何将嵌套_.each转换为同步方法?首选使用 Promise 或 Async.waterfall
- 如何将具有两个回调的函数调用转换为promise
- 如何使用Q将事件监听器转换为promise
- 将节点异步代码转换为promise
- 将jQuery.each中带有multiple.get()的函数转换为q promise
- 如何将promise序列转换为Rx.用RxJS观察对象
- Node.js Bluebird Promise抱怨“将循环结构转换为json”
- 将Json值转换为小写"Uncaught(in promise) "SAPUI5
- 将可以多次调用的Javascript回调转换为promise
- 我能把callback转换成promise吗?
- 如何在ES6中将回调代码转换为promise
- 如何将Q.defer()转换为Promise作为实例变量
- 在promise(Node.js)(OpenTok)中转换带有回调的函数
- css转换的可选promise()函数