2016-08-25 1 views
-1

コンストラクタのスコープを保持する方法やこれまでどんな呼び出しをしたいのか分かりません。単にグローバル変数に置き換えられます。モジュールのコンストラクタとasyncの使用

私は複数の関数を呼び出し、それぞれ異なるデータを生成し、異なる変数を設定します。

どうすればこの問題を解決できますか?

function Foo(user, data) { 
    this.user = user; 
    this.data = data; 
} 
Foo.prototype.init = function(callback) { 
    async.series([ 
     this.functionOne, 
    ], function(err, result) { 
     callback(err, []); 
    }); 
}; 
Foo.prototype.functionOne = function(callback) { 
    console.log(this); 
    this.username = "abc"; 
    callback(null); 
} 
module.exports = Foo; 
あなたはおそらく、あなたが .bind()を使用して、メソッド参照を渡すとき this値を保持する必要がある

答えて

1

:非同期ライブラリを使用する理由はありません

function Foo(user, data) { 
    this.user = user; 
    this.data = data; 
} 
Foo.prototype.init = function(callback) { 
    async.series([ 
     // add `.bind(this)` here to preserve value of this 
     // when the function is called by async 
     this.functionOne.bind(this), 
    ], function(err, result) { 
     callback(err, []); 
    }); 
}; 
Foo.prototype.functionOne = function(callback) { 
    console.log(this); 
    this.username = "abc"; 
    callback(null); 
} 
module.exports = Foo; 

、が、1つのだけの非同期機能を持っている場合実行する。


あなたは非同期ライブラリにthis.functionOneを渡すと、渡され、そのすべてがfunctionOneメソッドへの参照です。 thisとの関連付けは保持されません。したがって、後で非同期ライブラリがそのメソッドを呼び出すと、thisの値が間違っています。 .bind()を使用して、正しい値のthisを新しい一時スタブ関数にバインドし、非同期に渡してから、メソッドが呼び出されると正しい値のthisが得られます。

関連する問題