【发布时间】:2016-05-18 01:05:13
【问题描述】:
我发现: Correct way to write loops for promise. 和While loop using bluebird promises
但是,当我尝试使用这些来循环一个 Promise 时,该 Promise 的解析值不会沿链传递。
例如,以下代码打印:
做了1次
做了 2 次
undefined hello world
var Promise = require('bluebird');
var times = 0;
var do_it = function(o) {
return new Promise(function(resolve, reject) {
setTimeout(function () {
console.log("did it %d times", ++times);
resolve(o);
}, 1000);
});
}
var promiseWhile = Promise.method(function(condition, action) {
if (!condition()) return;
return action().then(promiseWhile.bind(null, condition, action));
});
var do_it_twice = function(o) {
return promiseWhile(
function() { return times < 2; },
function() { return do_it(o); }
);
}
do_it_twice("hello world").then(function(o) {console.log(o)});
【问题讨论】:
-
if (!condition()) return;- 将其更改为if (!condition()) return 'oops';...现在会发生什么? -
谢谢。就是这样。
-
真的吗?这不能解决问题,这表明你做错了什么!
-
是的。我就是这个意思。
标签: javascript node.js promise bluebird