【发布时间】:2019-02-21 13:35:31
【问题描述】:
我正在努力实现以下目标:
我要调用 3 个 API 来检索 DATA:
- 第一个 API 启动一个用于检索数据的作业并为其返回一个 id
- 第二个 API 通知我作业的状态(已完成、已取消...),我需要对该 API 执行多次调用,然后才能调用下一个。
- 第三个 API 是在作业完成时将数据发回给我的 API。
我遇到的问题是使用第二个 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 块内的主程序中没有任何反应
【问题讨论】:
-
您是完全没有得到响应还是出现某种错误?
-
@Amiratak88 没有区别,jQuery ajax 也适用于 Promise。
-
“但没有成功”到底是什么意思?什么有效,什么无效?请贴出
recursiveJobIdCheck函数的代码。 -
"我确实尝试过超时" - 你需要将它包装在一个 Promise 中并链接到它。另外不要忘记
return所有函数的所有承诺,以便您可以正确等待结果。 -
@Bergi 我知道。只是好奇为什么要使用 jQuery 来处理该语言已经支持的东西。
标签: javascript jquery api asynchronous promise