Javascript 异步函数回调返回值
我知道我可以传递回调函数来访问该值,但在我的例子中,它需要执行同步方法,这样我就可以在回调之外执行操作,有什么提示可以帮助我吗Javascript 异步函数回调返回值,javascript,jquery,Javascript,Jquery,我知道我可以传递回调函数来访问该值,但在我的例子中,它需要执行同步方法,这样我就可以在回调之外执行操作,有什么提示可以帮助我吗 var foo; function getFoo(callback) { $.ajax({ url: url, async: false }) .done(function(respond) { var data = respond.data; doStuff(da
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
如果整个函数是同步的,则只能返回一个值;在您的例子中,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
});
如果doStuff是异步的,那么它也不会工作,因为getFoo中的$.ajax是异步的:false您需要使用success:function{…}回调格式,而不是.done回调。。。从jQuery1.8开始,使用async:false和jqXHR$.Deferred是不推荐的;您必须使用success/error/complete回调选项,而不是jqXHR对象的相应方法,如jqXHR.done或不推荐使用的jqXHR.success