如何使用节点提取重试 api 调用



我正在尝试在我的节点js代码中使用node-fetch向外部API发布请求。
如果在执行 POST 请求时出现任何超时或网络故障,我想重试请求 3 次。
你能告诉我如何使用节点获取重试请求吗?我看到有一个 npm 模块 https://www.npmjs.com/package/node-fetch-retry 但它似乎没有按预期工作,并且它也不接受重试之间的重试间隔。任何代码片段都将非常有帮助。

编辑:

谢谢,我尝试使用 promise-fn-retry,但它似乎没有进行任何重试。下面是我通过关闭 WIFI 然后执行 FETCH 调用以查看它是否重试 3 次来尝试的代码片段。但它只执行一次提取并返回错误。

const promiseFn = () => fetch(url,{method:"POST",headers:header,body:JSON.stringify(payload)});
const options = {
times: 3,
initialDelay: 100,
onRetry: (error) => {
console.log(error);
}
};
console.log('PromiseFn result ****'+retry(promiseFn, options).then(res => res.json()).then((res)=>{console.log('Promise Fn result is'+JSON.stringify(res))}).catch((err)=>{console.log('Error in Promise Fn'+err)}));

这个片段过去帮助过我!希望这是你要找的

const fetch = require('node-fetch');
const delay = (ms) => new Promise((resolve) => setTimeout(() => resolve(), ms));
const retryFetch = (
url,
fetchOptions = {},
retries = 3,
retryDelay = 1000,
timeout
) => {
return new Promise((resolve, reject) => {
// check for timeout
if (timeout) setTimeout(() => reject('error: timeout'), timeout);
const wrapper = (n) => {
fetch(url, fetchOptions)
.then((res) => resolve(res))
.catch(async (err) => {
if (n > 0) {
await delay(retryDelay);
wrapper(--n);
} else {
reject(err);
}
});
};
wrapper(retries);
});
};
retryFetch('http://localhost:8080/test', {}, 20)
.then((res) => res.text())
.then(console.log)
.catch(console.error);

尝试 promise-fn-retry 包,它具有指定重试时间、初始延迟时间和处理失败获取/承诺的回调方法的属性。

希望这有帮助!

最新更新