【问题标题】:Iterate function and stop depending on callback value根据回调值迭代函数并停止
【发布时间】:2017-07-25 00:57:40
【问题描述】:

如何迭代 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 while,但我认为它对我没有帮助,因为测试函数也需要回调,并且test和iteratee的函数相同,我不能调用两次。

【问题讨论】:

  • 什么是调用函数?它是在哪里定义的??
  • 我无法理解您的要求!你能说得清楚一点吗?

标签: javascript node.js asynchronous asynccallback


【解决方案1】:

如果我正确理解您的问题。一些递归呢

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

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    相关资源
    最近更新 更多