【问题标题】:Return value from new object callback新对象回调的返回值
【发布时间】:2013-05-30 17:06:39
【问题描述】:

我有以下代码

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() 调用登录,但是我可以调用它的回调的返回值吗?

【问题讨论】:

  • 我无法理解Bar() 的作用——您也可以提供一些示例代码吗?而且我相信这与 AngularJs 无关
  • 这完全取决于bar 的作用以及它如何处理回调。
  • @callmekatootie 我更新了问题
  • @Zirak 我更新了问题
  • 这可能与您的问题没有直接关系。但是如果回调是一个函数???你能不能只通过callback 而不是function(callback){} ???

标签: javascript callback


【解决方案1】:

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

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
}

就从异步函数返回的东西而言,这很糟糕。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    相关资源
    最近更新 更多