繁体   English   中英

异步Javascript函数,不返回值

[英]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
});

使用$ .Deferred

(我假设它是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM