承诺循环中的动作函数不起作用
action function in promise loop not working
根据 this 关于 Whosebug 的问题,我尝试使 promiseFor
方法工作但没有成功。由于我没有足够的 "reputation" 来评论该线程,所以我来了。这是递归循环:
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);
});
我期望得到 [1,2,3]
的输出。但是我得到了一个 TypeError: undefined is not a function
指向该行:
return action(value).then(promiseFor.bind(null, condition, action));
这恰好是我没有完全理解的台词。 promiseFor.bind(null, condition, action)
究竟是做什么的?
编辑:
感谢 kyrylkov,我将 action
更改为:
function(arr){
return new Promise(function(resolve){
arr.push(arr.length + 1);
resolve(arr);
});
}
现在工作得很好。
在您的测试中,action
(包裹在 Promise.method
中的匿名函数中的第二个参数)是一个 returns 数组而不是承诺的函数:
function(arr){
arr.push(arr.length+1);
return arr;
}
因此,您在调用 action(value).then
时遇到错误,因为该数组没有 then
方法。
根据 this 关于 Whosebug 的问题,我尝试使 promiseFor
方法工作但没有成功。由于我没有足够的 "reputation" 来评论该线程,所以我来了。这是递归循环:
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);
});
我期望得到 [1,2,3]
的输出。但是我得到了一个 TypeError: undefined is not a function
指向该行:
return action(value).then(promiseFor.bind(null, condition, action));
这恰好是我没有完全理解的台词。 promiseFor.bind(null, condition, action)
究竟是做什么的?
编辑:
感谢 kyrylkov,我将 action
更改为:
function(arr){
return new Promise(function(resolve){
arr.push(arr.length + 1);
resolve(arr);
});
}
现在工作得很好。
在您的测试中,action
(包裹在 Promise.method
中的匿名函数中的第二个参数)是一个 returns 数组而不是承诺的函数:
function(arr){
arr.push(arr.length+1);
return arr;
}
因此,您在调用 action(value).then
时遇到错误,因为该数组没有 then
方法。