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()
});
}
我正在检查服务器是否完成了作业。我不想向服务器发送垃圾邮件,所以这就是我将使用 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()
});
}