【发布时间】:2020-06-25 10:28:41
【问题描述】:
过去几天我一直在与 Promise 和一个初学者一起努力。我必须调用外部 API 并检查是否有响应。如果为空,则以最大重试次数再次调用 api,这是可配置的。我尝试了以下方法,但不确定我在这里缺少什么。这是我所做的一个示例。
如果数据可用,则显示数据可用。如果没有,则重试一段时间,如果达到零,则使用 API 中不可用的数据进行解析。如果重试后数据可用(例如:第二次),则停止并显示响应。
function callExternalAPI(retry, interval) {
try {
return new promise((resolve, reject) => {
if(retry <=0 ) {
return resolve("Data not available in API"); // This is not working, request is hanged.
}
return myapiCall().then((response) => {
if(!response) {
// If empty then retry calling api again
return setTimeOut(async () => {
await callExternalAPI(retry - 1, interval)
}, interval);
}
return resolve(response);
})
})
}
} catch((error) => {
reject(error);
})
callExternalAPI(3, 1000).then((rsp) => {
console.log({response: "data available"});
}).catch((error) => {
throw error;
})
任何帮助将不胜感激,因为我仍处于学习阶段。
提前致谢
【问题讨论】:
-
不确定,但在 myapicall 回调中,您使用 response 作为变量名并且您正在检查 if(!result),因此请确保两者相同。
-
@RajShah 在 S.O. 中询问时这是一个错字
-
如果你是一个初学者,你会发现这些教程很有帮助:tutorama.info/CTG/Promises。
标签: javascript node.js promise es6-promise