Javascript 从匿名异步函数返回数据?

Javascript 从匿名异步函数返回数据?,javascript,jquery,asynchronous,return,anonymous,Javascript,Jquery,Asynchronous,Return,Anonymous,考虑: function ajaxCall(url, callback) { $.ajax({ type: "GET", url: url, success: function (data) { // <-- fail point: where does the returned data go, now? // do stuff with data if ( callback ) {

考虑:

function ajaxCall(url, callback) {
    $.ajax({
        type: "GET",
        url: url,
        success: function (data) { // <-- fail point: where does the returned data go, now?
            // do stuff with data
            if ( callback ) {
                var ret = callback();
                if ( ret !== undefined ) {
                    return ret;
                }
            }
        }
    });
}

function fooBar() {
    return ajaxCall('some/url', function () {
        // do stuff
        return some_value;
    }
}
函数ajaxCall(url,回调){
$.ajax({
键入:“获取”,
url:url,

成功:函数(数据){/您不能像这样异步使用调用,回调将在调用函数很久以后返回后运行。相反,您需要做的是调用需要数据作为回调的一部分(或整个)的函数,例如:

function ajaxCall(url, callback) {
  $.ajax({
    type: "GET",
    url: url,
    success: callback
  });
}

function fooBar() {
    ajaxCall('some/url', function (data) {
        functionThatNeedsData(data);
    });
}
这只是一个例子来说明发生了什么,实际上可能是:

function fooBar() {
  $.get('some/url', functionThatNeedsData);
}

这只是调用需要数据的
函数,该函数将从请求中获取数据作为第一个参数……因此,一旦服务器响应数据,您就将数据传递到需要执行的位置,并使用该数据执行其余工作。

您不能像这样异步使用调用,回调将在您的cal之后运行ling函数早就返回了。相反,您需要做的是调用需要数据作为回调的一部分(或整个)的函数,例如:

function ajaxCall(url, callback) {
  $.ajax({
    type: "GET",
    url: url,
    success: callback
  });
}

function fooBar() {
    ajaxCall('some/url', function (data) {
        functionThatNeedsData(data);
    });
}
这只是一个例子来说明发生了什么,实际上可能是:

function fooBar() {
  $.get('some/url', functionThatNeedsData);
}

这只是调用需要数据的
函数,该函数将从请求中获取数据作为第一个参数…因此,一旦服务器响应数据,您就将其传递到需要执行的位置,并使用该数据执行其余工作。

等等,这甚至不是有效的JavaScript…是的,抱歉。
$.ajax
无法传递从我的脑海中浮现到屏幕上。啊,我明白了。我想这一定是复制粘贴错误。:)等等,这甚至不是有效的JavaScript…是的,对不起。
$.ajax
无法从我的脑海中传到屏幕上。啊,我明白了。我想这一定是一个复制粘贴错误。:)但我希望该函数返回数据!哦,好吧,我只需要做很长一段时间…@passcod-我不确定该说什么…这就是异步调用的工作方式,如果你可以返回,它们将是同步的:)正是。但是现在我需要添加更多的异步性来获得我想要的…即自定义事件。虽然这个答案是正确的。但是我希望该函数返回数据!哦,好吧,我只需要做很长的一段路…@passcod-我不确定该说什么…如果你可以的话,这就是异步调用的工作方式反过来,它们将是同步的:)正是。但现在我需要添加更多的异步性来获得我想要的…即自定义事件。不过,这个答案是正确的。