[英]Async Javascript functions, not returning values
我遇到一个困扰我的问题。 基本上是这样的情况:
我有一个callController()
函数,只需使用jQuery.load()
方法即可加载控制器,加载后,我可以使用返回的参数进行播放。
现在...在我的一个控制器中,我需要检查一个验证规则,以允许用户执行某些功能,但是,我创建了一个如下函数:
function myValRule() {
var val = callController('blablabla'),
response = "";
val.done(function(data) {
//my business logic
response = something;
}
return response;
}
就像您想象的那样, response
,即使它有一个值,它也会返回undefined
,所以我设置了一个timeout和console.log()
,现在它有了一个值,但是即使我把return值也不能返回这个值进入setTimeout()
。 因此,基本上,当方法调用此函数进行验证时,它会发现它为空。
您能指出我解决这个问题的方向吗?
记住这是异步的! return response;
.done()
实际被调用时已经很久了。
如果您需要以这种方式返回的值,请查看在myValRule
函数中提供一个回调函数(可以从.done()
内部调用),或者可以查看使用$.Deferred
api,以便模仿callController(...)
在做。
这是这两种情况的示例(带有对myValRule
示例调用):
function myValRule(callback){
var val = callController('blablabla'),
val.done(function(data){
var response = /* something */;
callback(response);
});
}
myValRule(function(response){
// here you have response
});
(我假设它是jQuery,因为有一个.done调用)
function myValRule(){
var df = $.Deferred(),
val = callController('blablabla');
val.done(function(data){
var response = /*something */;
df.resolve(response);
}).fail(df.reject);
return df.promise();
}
myValRule().done(function(response){
// here you have response
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.