从异步调用示例返回响应

cal*_*off 1 javascript asynchronous callback

我已多次阅读此stackoverflow帖子如何从异步调用返回响应?.出于某种原因,我只是不明白.有人可以在这里将问题中的示例作为一个实际的完整工作解决方案发布,而不是在帖子"2.重组代码"中提供的逐步指导,我发现这个问题非常令人困惑.

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            result = response;
            // return response; // <- tried that one as well
        }
    });

    return result;
}

var result = foo(); // always ends up being `undefined`.
Run Code Online (Sandbox Code Playgroud)

squ*_*l25 7

success函数是一个回调函数,这意味着它可以随时调用.在这种情况下,它被调用 Ajax调用,并且return result;被调用之前 Ajax调用,意思result是不退还的,这就是为什么它总是不确定之前分配.

我喜欢解决这个问题的一种方法是将我自己的回调传递给foo函数,然后在收到数据时调用它,如下所示:

function foo(callback) {
    $.ajax({
        url: '...',
        success: function(response) {
            callback(response) // <-- call it here
        }
    });
}

foo(function(data){
    // use your data here
});
Run Code Online (Sandbox Code Playgroud)