根据回调值迭代函数并停止

时间:2017-07-24 16:18:57

标签: javascript node.js asynchronous asynccallback

如何根据回调返回迭代nodejs中的异步函数?

示例:

假设我有以下功能

var fn1 = function(i, callback){
    // code here
    callfunction(i, function(err, p2){
         if(err) throw err;
         if(something) return callback(true);
         else return callback(false);
    });
}

我需要迭代并调用i = 1,2,3,...直到我的回调返回false。

我尝试使用async,但我不认为它可以帮助我,因为测试功能也需要回调,而test和iteratee的功能是相同的,我不能再调用两次。

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题。一些递归怎么样

const maxTries = 10;

// just a stupid counter to run a be able to change return value
let numberOfCalls = 0;

const asyncCall = () => {
  if (numberOfCalls === 9) {
    return Promise.resolve(false);
  }
  numberOfCalls += 1;
  return Promise.resolve();
};

function iterate(calls = 0) {
  if (maxTries === calls) {
    return Promise.resolve();
  }
  return asyncCall().then(value => {
    if (value === false) {
      return value;
    }
    return iterate(calls + 1);
  });
}

iterate().then(result => {
  if (result === undefined) {
    //to many tries
  }
  console.log('result', result);
});