gpt4 book ai didi

javascript - 强制代码在另一个方法完成执行后执行

转载 作者:行者123 更新时间:2023-12-04 02:14:40 25 4
gpt4 key购买 nike

这是我想做的:

setSource 是一个执行大约 3 秒的函数。

 editor.setSource();

setTimeout(function () {
//do something, some commands
}, 3000);

我希望//do something, some commands 部分在执行 setSource() 的最后一行之后执行。现在我用 setTimeout 来做,但我认为这不是很好的解决方案,因为有时 setSource() 可能需要 5 秒才能执行。如何做到这一点?

最佳答案

setSource 接受一个回调参数:

editor.setSource = function(callback) {
// do editor things
callback();
}

然后传递下一个要执行的代码块作为回调:

editor.setSource(function() {
// do some other things
});

如果您有权访问 jQuery 的延迟对象,您可以在这里使用它们:

  1. 创建一个新的延迟对象。
  2. 开始超时以完成您的长期任务。
  3. 返回延迟的对象。
  4. 在超时时间内,一旦任务完成,调用deferred.resolve

editor = {
setSource: function() {
var deferred = $.Deferred();

console.log("Beginning editor.setSource...");

setTimeout(function() {
// This function took a while to occur
deferred.resolve();
}, 3000);

return deferred;
}
}

$.when(editor.setSource()).then(function() {
console.log("Editor is done!");
});

如果您正在执行 AJAX 或动画或其他已经使用延迟对象的 jQuery 任务,您可以只返回其结果值而不是创建您自己的延迟对象:

editor = {
setSource: function() {
return $.get({
url: "myurl.com/mypage",
data: $("#myform").serialize()
});
}
}

$.when(editor.setSource()).then(function() {
console.log("Editor is done!");
});

确保查看如何解决拒绝延迟对象,以及如何处理这些对象。

关于javascript - 强制代码在另一个方法完成执行后执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15360393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com