重试try / catch on promise catch

时间:2018-03-02 22:04:04

标签: node.js firebase try-catch firebase-admin

我正在尝试使用firebase admin sdk运行一个脚本,该脚本使用listUsers()循环遍历所有用户,我正在处理它:

admin.auth().listUsers(batch, nextPageToken)
    .then(function(listUsersResult) {
        // process successful results
    })
    .catch(function(error) {
        // log the error
    });

偶尔对listUsers本身的调用失败,错误为Error: www.googleapis.com network timeout. Please try again.

我发现了错误,但在此之后我的脚本将不会继续。 在这种情况下我之前使用过retry,但我想知道是否或如何继续使用我所使用的同一批用户/令牌,而无需重新启动listUsers循环。也许我错过了一些非常简单的事情?

1 个答案:

答案 0 :(得分:1)

我不确定我是否帮助你。 您想使用相同的参数重试错误吗?

手动你会这样做:

function fun(batch, nextPageToken, retries = 5) {
  return admin
    .auth()
    .listUsers(batch, nextPageToken)
    .then(listUsersResult => {
      // process successful results
    })
    .catch(error => {
      if (err.code === 'ETIMEDOUT' && retries > 0) {
        const turnsLeft = retries - 1;
        return fun(batch, nextPageToken, turnsLeft);
      }
      throw error;
    });
}

但你应该使用一些库。