我有一种情况,我有一个基于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);
});
好处:更干净,更可预测的代码行为。