Bri*_*ith 17 javascript promise bluebird
我正在尝试使用promises实现while循环.
这里概述的方法似乎有效. http://blog.victorquinn.com/javascript-promise-while-loop 它使用这样的函数
var Promise = require('bluebird');
var promiseWhile = function(condition, action) {
var resolver = Promise.defer();
var loop = function() {
if (!condition()) return resolver.resolve();
return Promise.cast(action())
.then(loop)
.catch(resolver.reject);
};
process.nextTick(loop);
return resolver.promise;
};
Run Code Online (Sandbox Code Playgroud)
这似乎使用反模式和弃用的方法,如强制转换和延迟.
有谁知道更好或更现代的方法来实现这一目标?
谢谢
Ber*_*rgi 20
cast可以翻译成resolve.defer应该确实不能使用.
您只能通过将then调用链接和嵌套到初始化来创建循环Promise.resolve(undefined).
function promiseWhile(predicate, action, value) {
return Promise.resolve(value).then(predicate).then(function(condition) {
if (condition)
return promiseWhile(predicate, action, action());
});
}
Run Code Online (Sandbox Code Playgroud)
在这里,无论是predicate和action可能返回的承诺.对于类似的实现,还要看一下为promise创建循环的正确方法.更接近你原来的功能
function promiseWhile(predicate, action) {
function loop() {
if (!predicate()) return;
return Promise.resolve(action()).then(loop);
}
return Promise.resolve().then(loop);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8827 次 |
| 最近记录: |