异步函数回调返回值

时间:2014-08-04 10:53:53

标签: javascript jquery

我知道我可以通过回调函数来访问该值,看起来像How to return value from an asynchronous callback function?但是在我的情况下,它需要执行同步方法,所以我可以在回调之外做任何动作,任何提示都要提供帮助吗?

var foo;

function getFoo(callback) {
    $.ajax({
        url: url,
        async: false
    })
            .done(function(respond) {
        var data = respond.data;
        doStuff(data, function(respond) { //This is callback from Asynchronous function
            callback(respond);
        })
    });
}

getFoo(function(respond) {
    foo = respond;
});

return foo; //How can I access foo value from respond

1 个答案:

答案 0 :(得分:0)

如果整个函数是同步的,则只能返回一个值;在你的情况下,doStuff是异步的,所以你不能那样返回foo(但最好还是异步编写整个东西,因为如果你使用jQuery的async: false选项,它会阻止用户界面,直到AJAX结果返回为止。)

以下是您可以重新构建代码的示例:

function example(exampleCallback) { 
    function getFoo(callback){
        $.ajax({
            url: url
        })
        .done(function(respond) {
            var data = respond.data;
            doStuff(data,function(respond){ //This is callback from Asynchronous function
              callback(respond);
            })
        });
    }

    getFoo(function(respond){
        exampleCallback(respond);
    });
}

example(function(foo) {
    //do something with foo
});