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

考虑:

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; } } 

是的,所以基本上,我想保留请求的异步性,这样浏览器就不会挂起,但最后仍会返回一个值…这是一个简化的例子,即使我可能更简化它。

事实上,我看到的唯一障碍是$.ajax与其success:之间的过渡success:匿名function。

哼。

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

 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); } 

这只是调用你的functionThatNeedsData ,它从请求中获取数据作为第一个参数……所以一旦服务器响应数据,你就把它传递到它需要做的地方并用这些数据做其余的工作。