Node.js 承诺循环中的操作函数不工作

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,

在关于stackoverflow的问题之后,我试图让
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)来解决这个问题。或者看看。谢谢你,我完全没有想到。将其更改为返回一个
新承诺
,现在它的行为符合我的预期。谢谢,我完全没有想到这一点。将其更改为返回一个
新承诺
,现在它的行为符合我的预期。