【问题标题】:How to run a javascript function multiple time till you satisfy the if condition如何多次运行javascript函数直到满足if条件
【发布时间】:2017-12-03 15:13:54
【问题描述】:

我有一个 Ajax 调用,我想多次运行它,直到它满足特定的 if 条件。 AJAX 调用为您提供作业状态 - 正在运行、已排队和已完成。 我无法获得作业状态 - 完成。获得运行状态后,需要几分钟才能获得状态完成。到目前为止,我已经尝试了以下 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);
});

【问题讨论】:

  • Promises。未能使用setInterval 检查条件。
  • 这被称为长轮询,基本上包括敲击服务器,直到它为您提供您正在等待的值。更聪明的方法是使用 websockets,这将允许服务器在完成时通知客户端。
  • 调用 100 次似乎是个坏主意......

标签: javascript json ajax alteryx


【解决方案1】:

正如 Jeremy Thille 所说,这称为长轮询。一种简单的方法是创建一个调用服务器的函数。然后,如果失败,稍后使用setTimeout 排队另一个请求。

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();

【讨论】:

  • 为什么要浪费 1 秒?
  • @Priya 不必那么长。如果你认为在那之前你会得到回应,那就去做吧。但是,如果您不希望在 200 毫秒内获得有效响应,那么每隔 50 毫秒访问一次服务器是没有意义的。
  • 您好,迈克,感谢您的回答,由于某种原因,此解决方案不起作用。我也试过setInterval。它只是没有检测到 if 条件
  • @dpr 如果您没有点击您的if 语句,请检查您的服务器上发生了什么。您必须点击错误部分。
  • @dpr 不要忘记第一次打电话给pollForJob。我会更新我的答案以表明这一点。
猜你喜欢
  • 2021-06-10
  • 2012-01-10
  • 2017-01-23
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多