从新对象回调中返回值

时间:2013-05-30 07:20:45

标签: javascript callback

我有以下代码

var foo = new Bar(function(callback){
    return callback  //async, use $q in angularjs
});

new Bar()有其属性和回调。 比方说,属性foo.pro()也称之为,但我怎样才能调用foo来返回回调值?

更新 Bar()实际上是firebase身份验证对象 代码在这里

new FirebaseAuthClient(url, function(error, user){
  if (user) {
   console.log(user)  //if user logged in
  } else if(error) {
   console.log(error) //if login fail
  } else {
   console.log('user not login') //user not login
  }
});

所以在这里,FirebaseAuthClient也有属性FirebaseAuthClient.login()和.logout()

我认为这与firebase无关,但javascript因此我跳过了代码。回到我的问题,我怎样才能返回回调的值?

如果我将var设置为foo 我可以使用foo.login()来调用登录,但我可以调用其回调的返回值吗?

1 个答案:

答案 0 :(得分:0)

所以问题是如何返回传递给异步函数回调的东西。要做的就是不返回任何东西,只是处理回调函数中的信息:

function Bar(callback) {
       //some code
       var xy = 1;
       callback(xy);    
}


var foo = new Bar(function (arg) {
       doSomething(arg);    
});


function soSomething(arg) {
    //...
}

现在假设您想拥有一个全局变量,并且希望将回调函数的参数赋值给它。在这种情况下,您可以在doSomething内部执行该任务,并触发使用全局变量的函数:

var myVar;

function Bar(callback) {
       //some code
       var xy = 1;
       callback(xy);    
}


var foo = new Bar(function (arg) {
       doSomething(arg);    
});


function soSomething(arg) {
    myVar = arg;
    goOn();
}

function goOn() {
    //do something with myVar
}

就异步函数返回事物而言,这是一个不错的选择。