0

次のコードがあります

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

new Bar()プロパティとコールバックがあります。たとえば、プロパティもそれを呼び出しますが、コールバック値を返すためfoo.pro()にどのように呼び出すことができますか?foo

Update 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()と、login を呼び出すために使用できますが、そのコールバックの戻り値を何と呼ぶことができますか?

4

1 に答える 1

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
}

これは、非同期関数から返されるものに関する限り、よく知られています。

于 2013-05-30T09:06:39.847 に答える