我有一种情况,我有一个基于setInterval的代码来检查ajax调用返回的值。像这样:

var processInterval = setInterval(function () {

    var processResult = getVideoStatus(data.file_name);

    console.log(processResult);

    if (processResult === "ready") {

        clearInterval(processInterval);
        //Logic

    }

}, 1000);


至于getVideoStatus函数,它是:

var getVideoStatus = function () {

    var result = null;
    jQuery.ajax({
        url: 'someurl',
        type: 'GET',
        dataType: 'html',
        success: function (response) {

            result = response;

        }
    });

    var statusTimeout = setInterval(function () {

        if (result != null) {

            clearInterval(statusTimeout);
            alert(result);
            return result;

        }

    }, 100);


}


我尝试在getVideoStatus函数中执行的操作是使其仅在ajax调用完成且result不为null时才返回值。我看到它确实返回/提示正确的值,但是当我尝试console.log(processResult)时,它根本不记录任何内容。

我认为这与第一个间隔有关,因为getVideoStatus似乎返回的值还可以。有逻辑问题吗?

最佳答案

您选择的方法并不理想。只需使用适当的Promise / thenable API,该API可在数据可用时提供回调。在您的情况下:

var getVideoStatus = function () {
    return jQuery.ajax({
        url: 'someurl',
        type: 'GET',
        dataType: 'html'
    });
}

getVideoStatus().then(function(result) {
    console.log(result);
});


好处:更干净,更可预测的代码行为。

09-25 09:59