如果作业完成,我会检查服务器。我不想向服务器发送垃圾邮件,这就是为什么我会使用setInterval。
我调用触发器功能,当在服务器上完成作业时(可能在完成之前完成2-3次调用),该功能完成。
我知道我可以在区间内调用我的finishFunction并解决它。但我想返回它,因为我从另一个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);
}
答案 0 :(得分:3)
从函数返回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()
});
}