我正在努力实现以下目标:
我有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块内的主程序中没有任何反应
答案 0 :(得分:1)
您将需要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 */)