使用回调组织Javascript

use*_*065 2 javascript jquery

我试图找出在我的网站上组织一堆AJAX方法的最佳方法.问题是我希望在收到每个回调后运行一堆回调.这是一个例子(假设每个方法异步运行):

Log_in_user
    if response received and call was successful
        get_user's_data
            if response received and call was successful
                alert user
Run Code Online (Sandbox Code Playgroud)

希望现在问题很明显.因为每个方法都是异步运行的,所以代码不会按顺序运行.相反,我希望传递下一个函数作为回调运行在运行它的函数之后运行,我将不得不将越来越多的回调传递给第一个函数,这取决于我希望在每个函数之后发生多少事情.异步方法返回.例如,在这种情况下,我将不得不将两个回调传递给Log_in_user函数Log_in_user(get_user's_data,alert_user).我在彼此之后运行的回调越多,我将需要传递给原始Log_in_user函数的回调越多.

是否有更模块化和更有条理的方式来做到这一点?

Gui*_*ano 6

jQuery 1.5为你做的,你可以使用.when()

例:

function doAjax(){
    return $.get('/echo/html/');
}

function doMoreAjax(){
    return $.get('/echo/html/');
}

$.when( doAjax(), doMoreAjax() )
    .then(function(){
        console.log( 'I fire once BOTH ajax requests have completed!' );
    })
    .fail(function(){
        console.log( 'I fire if one or more requests failed.' );
    });
Run Code Online (Sandbox Code Playgroud)

来自jsfiddle