promise循环中的action函数不起作用

时间:2015-08-06 18:48:25

标签: node.js promise bluebird

关于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);
  });
}

现在像魅力一样工作。

1 个答案:

答案 0 :(得分:0)

在你的测试中,<form>(包含在action中的匿名函数中的第二个参数)是一个返回数组的函数,而不是一个promise:

Promise.method

因此,您在调用function(arr){ arr.push(arr.length+1); return arr; } 时收到错误,因为数组没有action(value).then方法。