异步Javascript函数,不返回值

时间:2014-05-23 12:51:59

标签: javascript asynchronous

我有一个让我头疼的问题。基本上就是这种情况:

我有一个callController()函数,只需简单地使用jQuery.load()方法加载控制器,加载后,我可以使用返回的参数。

现在...在我的一个控制器中有一个验证规则我需要检查以便允许用户执行某些功能,但是,我创建了这样的函数:

function myValRule() {

    var val = callController('blablabla'),
    response = "";
    val.done(function(data) {
        //my business logic
        response = something;
    }
    return response;

}

如您所想,response,即使它有一个值,它也会返回undefined,所以我设置了一个超时并console.log()它,现在它有一个值,但我不能即使我将回报放入setTimeout(),也要返回此值。所以基本上当方法调用此函数进行验证时,它会发现它为空。

你能指点我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

记住这是异步的!实际调用return response;时,.done()早已消失。

如果您需要以这种方式返回的值,请查看在myValRule函数中提供回调函数(可以从.done()内调用),或者查看使用{{1 } api所以你可以模仿$.Deferred正在做什么。

这是两个方案的示例(示例调用callController(...)):

回调参数

myValRule

使用$ .Deferred

(我认为这是jQuery,因为那里有一个.done电话)

function myValRule(callback){
  var val = callController('blablabla'),
  val.done(function(data){
    var response = /* something */;
    callback(response);
  });
}
myValRule(function(response){
  // here you have response
});