Javascript jQuery 然后间隔

Javascript jQuery then in interval

我正在检查服务器是否完成了作业。我不想向服务器发送垃圾邮件,所以这就是我将使用 setInterval 的原因。

我调用触发器函数,当作业在服务器上完成时(可能在完成之前调用 2-3 次),函数就完成了。

我知道我可以在间隔中调用我的 finishFunction 并解决它。但是我想 return 因为我从另一个 js 文件调用了触发函数。如果可能的话,我想在那里处理。

function trigger() {
    var response = startInterval();
    response.then(function() {
        //done finishFunction()
    });
}

function checkServer() {
    var obj = { test: true }
    var respons = $.ajax({
        url: "MyUrl",
        data: JSON.stringify({ obj: obj }),
        type: "POST",
        contentType: "application/json",
        dataType: "JSON",
        cache: false
    });
    return respons;
}

function startInterval() {
    var inProgress = false;
    var interval = setInterval(function () {
        if (!inProgress) {
            inProgress = true;
            var response = checkServer().then(function (data) {
                var isDoneInQueue = JSON.parse(data.d);
                if (isDoneInQueue) {
                    //finishFunction()???
                    clearInterval(interval);
                    return response;
                };

                inProgress = false;
            });
        }
    }, 1000);
}

Return 来自函数的 Deferred 对象,并在服务器作业完成时解析它:

function startInterval() {
    var result = $.Deferred();
    var inProgress = false;
    var interval = setInterval(function () {
        if (!inProgress) {
            inProgress = true;
            checkServer().then(function (data) {
                var isDoneInQueue = JSON.parse(data.d);
                if (isDoneInQueue) {
                    clearInterval(interval);
                    result.resolve(data);
                };
                inProgress = false;
            });
        }
    }, 1000);
    return result;
}

无论你用什么调用 resolve 方法,都会发送到你用 then 方法使用的函数:

function trigger() {
    startInterval().then(function(data) {
        //done finishFunction()
    });
}