Node.js 承诺循环中的操作函数不工作
在关于stackoverflow的问题之后,我试图让Node.js 承诺循环中的操作函数不工作,node.js,promise,bluebird,Node.js,Promise,Bluebird,在关于stackoverflow的问题之后,我试图让promiseFor方法工作,但没有成功。因为我没有足够的“声誉”来评论这个帖子,所以我来了。这是递归循环: var promiseFor = Promise.method(function(condition, action, value) { if (!condition(value)) return value; return action(value).then(promiseFor.bind(null, condition,
promiseFor
方法工作,但没有成功。因为我没有足够的“声誉”来评论这个帖子,所以我来了。这是递归循环:
var promiseFor = Promise.method(function(condition, action, value) {
if (!condition(value)) return value;
return action(value).then(promiseFor.bind(null, condition, action));
});
我就是这样测试的:
promiseFor(function(arr){ //condition
return arr.length < 3;
}, function(arr){ //action
arr.push(arr.length+1);
return arr;
}, []) //initial value
.done(function(arr){
console.log(arr);
});
这恰好是我还没有完全理解的一句话。promiseFor.bind(null,condition,action)
编辑:
感谢Kyrykov,我将操作更改为:
function(arr){
return new Promise(function(resolve){
arr.push(arr.length + 1);
resolve(arr);
});
}
现在工作起来很有魅力。在您的测试中,操作
(匿名函数中的第二个参数包装在Promise.method
中)是一个返回数组而不是承诺的函数:
function(arr){
arr.push(arr.length+1);
return arr;
}
因此,在调用操作(值)时会出现错误。然后
因为数组没有然后
方法。在测试中,操作
(匿名函数中的第二个参数包装在Promise.method
中)是返回数组的函数,而不是Promise:
function(arr){
arr.push(arr.length+1);
return arr;
}
因此,在调用操作(值)时会出现错误。然后
因为数组没有然后
方法。啊,我应该做出承诺。解决(操作(值))。然后(…)
-某个操作
没有返回承诺的人总有一天会被绊倒。您可以通过执行return Promise.resolve(arr)来解决这个问题代码>。或者看一看。啊,我应该做出承诺。解决(行动(价值))。然后(…)
-某个行动
没有兑现承诺的人总有一天会被承诺绊倒。您可以通过执行return Promise.resolve(arr)来解决这个问题代码>。或者看看。谢谢你,我完全没有想到。将其更改为返回一个新承诺
,现在它的行为符合我的预期。谢谢,我完全没有想到这一点。将其更改为返回一个新承诺
,现在它的行为符合我的预期。