如何多次运行javascript函数直到满足if条件

如何多次运行javascript函数直到满足if条件,javascript,json,ajax,alteryx,Javascript,Json,Ajax,Alteryx,我有一个Ajax调用,我想运行多次,直到它满足特定的if条件。AJAX调用为您提供作业状态Running、Queued和Complete。 我无法获取作业状态-完成。获得运行状态后,需要几分钟才能完成状态。到目前为止,我已经尝试了以下JS。我还想在满足if条件后中断循环。我也不确定我是否应该打100次电话,因为这可能需要更多的时间。谢谢你的帮助 我的JS: var pollForJob= gallery.getJob(jobId, function(job){ var jobStat=j

我有一个Ajax调用,我想运行多次,直到它满足特定的if条件。AJAX调用为您提供作业状态Running、Queued和Complete。 我无法获取作业状态-完成。获得运行状态后,需要几分钟才能完成状态。到目前为止,我已经尝试了以下JS。我还想在满足if条件后中断循环。我也不确定我是否应该打100次电话,因为这可能需要更多的时间。谢谢你的帮助

我的JS:

var pollForJob= gallery.getJob(jobId, function(job){
    var jobStat=job.status;
    console.log(jobStat);
    if(jobStat=="Complete"){
        alert("Complete");
    } else {
    // Attempt it again in one second
       setTimeout(pollForJob, 1000);
       console.log("still working");
       console.log(jobStat);
    }
},  function(response){
    var error = response.responseJSON && response.responseJSON.message || 
                 response.statusText;
    alert(error);
    // Attempt it again in one second
    setTimeout(pollForJob, 1000);
});

正如Jeremy Thille所说,这叫做长时间投票。一种简单的方法是创建一个函数,用于向服务器发出调用。然后,如果失败,则稍后使用将另一个请求排队

function pollForJob() {
    gallery.getJob(jobId, function(job) {
        var jobStat = job.status;
        if (jobStat == "Complete") {
            alert("Complete");
        } else {
           // Attempt it again in one second
           setTimeout(pollForJob, 1000);
        }
    }, function(response) {
        var error = response.responseJSON && response.responseJSON.message || response.statusText;
        console.error(error);
        // Attempt it again in one second
        setTimeout(pollForJob, 1000);
    });
}
pollForJob();

看看
承诺
。如果失败,请使用
setInterval
检查该条件。这称为长轮询,基本上包括敲打服务器,直到它给出您等待的值。一个更聪明的方法是使用WebSocket,这将允许服务器在完成时通知客户端。调用100次似乎不是一个好主意……为什么要浪费1秒钟?@Priya它不必那么长。如果你认为你会在那之前得到回应,那就去做吧。但是,如果您不希望在200毫秒内得到有效响应,那么每隔50毫秒点击服务器是没有意义的。您好,迈克,感谢您的回答,因为某种原因,此解决方案不起作用。我也试过设置间隔。它只是没有检测到ifcondition@dpr如果您没有点击
If
语句,请检查服务器上发生了什么。您必须点击错误部分。@dpr不要忘记第一次调用
pollForJob
。我会更新我的答案来说明这一点。