如何使用Rxjs的重试到我的await函数?

问题描述 投票:0回答:1

我必须从我的代码块返回一个await函数,现在当await函数被调用并且第一次尝试失败时,我想再重试一次,如果第二次失败..我将显示一条错误消息。

这是我的代码

async makeCall(inputs: myInputs): Promise<Instance> {

    const emailOptions: CreateOptions = {
      to: inputs.toPhone,
      from: this.config.accountPhoneNumber
    };

    if (inputs.toPhone) {
      emailOptions.sendText = inputs.toPhone;
    }

    return await this.sample.create(emailOptions);
}

我想要这样的东西或有什么建议吗?喜欢 RxJs 的重试

 for(var i = 0; i < 1; i++)
      {
        var result = await this.sample.create(emailOptions);
        if(result)
        {
          // break the loop
          return result;
        }
      }
       // if we land here, so the number of retries was exceeded
       throw Error("...");
angular typescript async-await rxjs retrywhen
1个回答
0
投票

您可以使用这个article代码,它似乎正是您所需要的。它支持重试次数和自定义错误消息。

import './style.css';
let i = 0;
const promiseFn = () => {
  const condition = i >= 0;
  i++;
  return condition ? Promise.reject() : Promise.resolve();
};

const retryWithDelay = async (
  fn: any,
  retries = 3,
  finalErr = 'Retry failed'
) => {
  try {
    // try
    await fn();
  } catch (err) {
    // if no retries left
    // throw error
    if (retries <= 0) {
      console.log('error');
      return Promise.reject(finalErr);
    }
    //recursively call the same func
    return retryWithDelay(fn, retries - 1, finalErr);
  }
};

retryWithDelay(promiseFn, 2).then(() => {
  console.log('success');
});

Stackblitz 演示

© www.soinside.com 2019 - 2024. All rights reserved.