Node.js-在生产中的错误回调上重试相同的功能

时间:2018-11-18 00:38:15

标签: javascript node.js settimeout

我有一个带setTimeOut的javascript函数,如果API调用有任何错误,我正尝试调用相同的函数。我在catch块中调用了相同的函数。我的节点服务器将崩溃并且资源将被阻塞或将继续调用getData()函数

 let retry = ()=> {
          setTimeout(() => {
           getData() 
           retry()
       }, 3000); 
   }

   let getData = () =>{
    Someapi.getData().then((token) => {
        console.log(`Data after 3 seconds->${token}`)
    }).catch((err) => {
        getData()

    })
   }

2 个答案:

答案 0 :(得分:1)

我不知道这项工作是否可行。

 let retry = () => {
  setTimeout(() => {
    getData();
    retry();
  }, 3000);
};

while (true) {
  let getData = () => {
    Someapi.getData()
      .then(token => {
        console.log(`Data after 3 seconds->${token}`);
        return false;
      })
      .catch(err => {
        return true;
      });
  };
}

答案 1 :(得分:1)

我在项目中使用了此重试代码,在生产中效果很好:

const pause = (duration) => {
  return new Promise(resolve => setTimeout(resolve, duration));
};
const retry = (retryTimes, func, delay) => {
  return func().catch(
    (err) => {
      if(retryTimes > 0) {
        return pause(delay).then(
          () => retry(retryTimes - 1, func, delay * 2)
        );
      } else {
        return Promise.reject(err);
      }
    }
  );
};