关于stackoverflow的this问题,我试图使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);
});
我希望输出为[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);
});
}
现在像魅力一样工作。
答案 0 :(得分:0)
在你的测试中,<form>
(包含在action
中的匿名函数中的第二个参数)是一个返回数组的函数,而不是一个promise:
Promise.method
因此,您在调用function(arr){
arr.push(arr.length+1);
return arr;
}
时收到错误,因为数组没有action(value).then
方法。