首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在上一个函数完成后调用函数

在上一个函数完成后调用函数
EN

Stack Overflow用户
提问于 2011-02-15 14:07:04
回答 8查看 593.7K关注 0票数 211

我有以下JavaScript代码:

代码语言:javascript
复制
$('a.button').click(function(){
    if (condition == 'true'){
        function1(someVariable);
        function2(someOtherVariable);
    }
    else {
        doThis(someVariable);
    }
});

如何确保仅在function1完成后才调用function2

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-02-15 14:11:55

指定匿名回调,并让function1接受:

代码语言:javascript
复制
$('a.button').click(function(){
    if (condition == 'true'){
        function1(someVariable, function() {
          function2(someOtherVariable);
        });
    }
    else {
        doThis(someVariable);
    }
});


function function1(param, callback) {
  ...do stuff
  callback();
} 
票数 229
EN

Stack Overflow用户

发布于 2014-03-18 15:31:36

试试这个:

代码语言:javascript
复制
function method1(){
   // some code

}

function method2(){
   // some code
}

$.ajax({
   url:method1(),
   success:function(){
   method2();
}
})
票数 55
EN

Stack Overflow用户

发布于 2015-09-22 21:26:44

此答案使用promises,这是ECMAScript 6标准的JavaScript特性。如果你的目标平台不支持promises,用PromiseJs填充它。

Promises是一种在JavaScript中处理异步操作的新方法(而且要好得多):

代码语言:javascript
复制
$('a.button').click(function(){
    if (condition == 'true'){
        function1(someVariable).then(function() {
            //this function is executed after function1
            function2(someOtherVariable);
        });
    }
    else {
        doThis(someVariable);
    }
});


function function1(param, callback) {
    return new Promise(function (fulfill, reject){
        //do stuff
        fulfill(result); //if the action succeeded
        reject(error); //if the action did not succeed
    });
} 

对于这个简单的示例,这似乎是一个很大的开销,但对于更复杂的代码,它比使用回调要好得多。您可以使用多个then语句轻松链接多个异步调用:

代码语言:javascript
复制
function1(someVariable).then(function() {
    function2(someOtherVariable);
}).then(function() {
    function3();
});

您还可以轻松地包装jQuery延迟(从$.ajax调用返回):

代码语言:javascript
复制
Promise.resolve($.ajax(...params...)).then(function(result) {
    //whatever you want to do after the request
});

正如@charlietfl所指出的,由$.ajax()返回的jqXHR对象实现了Promise接口。所以实际上没有必要将它包装在Promise中,它可以直接使用:

代码语言:javascript
复制
$.ajax(...params...).then(function(result) {
    //whatever you want to do after the request
});
票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5000415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档