[英]asynchronous javascript promises call with settimeout
我正在努力實現以下目標:
我有 3 個 APIS 可以調用以檢索數據:
我的問題是使用第二個 API,我沒有成功將數據發送回我的程序,這是我的代碼:
function getJobId(token) {
return $.ajax({
url: "url" + token;
});
}
function getJobStatus(job_id) {
var url = "url" + job_id;
return $.ajax({
url: url
});
}
getJobStatus(job_id).then(function(response) {
if (response.jobrun_status === "QUEUED" || response.jobrun_status === "INPROGRESS") {
//setTimeout(recursiveJobIdCheck(job_id), 2000);
recursiveJobIdCheck(job_id);
} else {
console.log(response.jobrun_status);
return response.jobrun_status;
}
});
我確實嘗試在對第二個 API 的每次調用之間設置超時,但沒有成功,有人可以向我解釋如何實現這一點,同時在每個請求調用之間保持間隔直到作業完成。
先感謝您。
編輯:我忘了在這里添加 recursiveJobIdCheck 函數
function recursiveJobIdCheck2(job_id) {
return new Promise((resolve,reject) => {
getJobStatus(job_id).then(function(response){
if(response.jobrun_status === "QUEUED" || response.jobrun_status === "INPROGRESS"){
//setTimeout(recursiveJobIdCheck(job_id), 2000);
recursiveJobIdCheck2(job_id);
}
else{
if(response.jobrun_status === "COMPLETED"){
console.log(response.jobrun_status);
resolve(response.jobrun_status);
}
else{
reject(response.jobrun_status);
}
}
});
});
}
對 api 的調用在完成之前一直在運行,當我通過 Resolve 函數返回值時,.then 塊內的主程序中沒有任何反應
您將需要async/await
來處理遞歸 api 調用以簡化代碼。
function getJobStatus(job_id){
var url = "url" + job_id;
return $.ajax({
url : url
});
}
function queueNextCall () {
return new Promise(function (resolve, reject) {
setTimeout(resolve, 2000);
});
}
async function recursiveJobIdCheck(job_id) {
var response = await getJobStatus(job_id)
if(response.jobrun_status === "QUEUED" || response.jobrun_status === "INPROGRESS"){
await queueNextCall();
return recursiveJobIdCheck(job_id)
} else {
console.log(response.jobrun_status);
return response.jobrun_status;
}
}
你所要做的就是打電話
recursiveJobIdCheck(job_id).then(/* Success job function */)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.