强制代码在另一个方法完成执行后执行
这是我想要做的:
setSource是一个执行大约3秒的函数。
editor.setSource();
setTimeout(function () {
//do something, some commands
}, 3000);
我想//执行一些操作,在执行setSource()的最后一行之后执行一些命令部分。 现在我用setTimeout来做这件事,但我认为这不是一个很好的解决方案,因为有时setSource()需要5秒钟才能执行。 这个怎么做?
让setSource
接受一个回调参数:
editor.setSource = function(callback) {
// do editor things
callback();
}
然后传递下一个代码块作为回调执行:
editor.setSource(function() {
// do some other things
});
如果你有权访问jQuery的延迟对象,你可以在这里使用它们:
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!");
});
确保查找如何解决或拒绝延迟对象,以及如何处理这些对象。
这个答案使用了promises
,这是ECMAScript 6
标准的JavaScript特性。 如果您的目标平台不支持promises
,请使用PromiseJs填充它。
在较新的浏览器版本中,您可以使用ES6 promises
。 editor.setSource()
把它的执行封装到一个Promise
并返回,所以它可以继续使用其他函数。
editor.setSource = function(){
return new Promise(function(fulfill, reject){
//do your work
fulfill(resultValue);
});
};
要继续使用另一个函数,只需使用promise中的then
方法即可。
var promise = editor.setSource();
promise.then(function(result){
//do something more
});
我也在寻找解决方案,只有在前一个函数完全执行之后,我才想执行第二个函数,但我仍然尝试了回调函数,但仍然没有得到解决方案,最后我找到了使用简单的$.ajax({ });
解决此问题的最简单方法$.ajax({ });
方法代码,这对我有用:)。
例如,
$.ajax({
url: function1(),
success: function(){
//function 2 code here or just call function2() here
}
});
就是这样,在这个代码中,url参数将会调用第一个函数,并且只有在它的执行函数成功时才会调用2。
链接地址: http://www.djcxy.com/p/55299.html上一篇: Force code to execute after another method finishes executing