Javascript 暂停 - 禁用一个功能直到另一个功能完成
Javascript pause - disable a function until another one finishes
我有两个功能,第一个选择东西,另一个延迟评估它,如下所示:
function select() {
// selecting stuff
window.setTimeout(evaluate, 1000);
}
function evaluate() {
// evaluating stuff
}
问题是,在第二次完成之前,应该禁用选择功能。我知道完全暂停 Javascript 是不可能的,但是当另一个函数正在等待或工作时第一个函数触发会严重破坏一切。我已经尝试将代码移动到其他函数并延迟它们,但没有任何效果。
提前致谢!
谁说不可能的?您可以通过保存和跟踪其 ID 来检查计时器当前是否 运行:
var timeout = null;
function select() {
if( timeout ) { // check if the timer ID is set
return;
}
// selecting stuff
timeout = window.setTimeout(evaluate, 1000); // return the ID of the timer
}
function evaluate() {
// evaluating stuff
window.clearTimeout(timeout); // clear the timer ID
timeout = null; // reset the timer ID
}
我认为这个问题应该是使用回调。回调是在执行另一个函数之后要执行的函数。这样你 gua运行tee 函数是 运行 在你的另一个 运行 之后。另外,你是如何获取数据的?许多 SQL 函数都内置了回调函数,即成功函数,您可以使用它们来调用其他函数。您可能会陷入回调地狱,但您可以使用其他函数回调来继续处理您的数据。
优秀文章在这里:
处理这种情况的正确方法是使用 promises。我更喜欢使用 Q 库 (https://github.com/kriskowal/q),当然你也可以使用 jquery。
假设您想 运行 select,运行 评估并禁用 select 直到评估完成:
var deferred = jQuery.Deferred();
function select() {
if (deferred.state() === "pending") {
console.log("Evaluate not finished");
} else {
// select stuff
evaluate(deferred.promise());
}
}
function evaluate(promise) {
// evaluating stuff
promise.resolve();
}
我有两个功能,第一个选择东西,另一个延迟评估它,如下所示:
function select() {
// selecting stuff
window.setTimeout(evaluate, 1000);
}
function evaluate() {
// evaluating stuff
}
问题是,在第二次完成之前,应该禁用选择功能。我知道完全暂停 Javascript 是不可能的,但是当另一个函数正在等待或工作时第一个函数触发会严重破坏一切。我已经尝试将代码移动到其他函数并延迟它们,但没有任何效果。
提前致谢!
谁说不可能的?您可以通过保存和跟踪其 ID 来检查计时器当前是否 运行:
var timeout = null;
function select() {
if( timeout ) { // check if the timer ID is set
return;
}
// selecting stuff
timeout = window.setTimeout(evaluate, 1000); // return the ID of the timer
}
function evaluate() {
// evaluating stuff
window.clearTimeout(timeout); // clear the timer ID
timeout = null; // reset the timer ID
}
我认为这个问题应该是使用回调。回调是在执行另一个函数之后要执行的函数。这样你 gua运行tee 函数是 运行 在你的另一个 运行 之后。另外,你是如何获取数据的?许多 SQL 函数都内置了回调函数,即成功函数,您可以使用它们来调用其他函数。您可能会陷入回调地狱,但您可以使用其他函数回调来继续处理您的数据。
优秀文章在这里:
处理这种情况的正确方法是使用 promises。我更喜欢使用 Q 库 (https://github.com/kriskowal/q),当然你也可以使用 jquery。 假设您想 运行 select,运行 评估并禁用 select 直到评估完成:
var deferred = jQuery.Deferred();
function select() {
if (deferred.state() === "pending") {
console.log("Evaluate not finished");
} else {
// select stuff
evaluate(deferred.promise());
}
}
function evaluate(promise) {
// evaluating stuff
promise.resolve();
}