私は、メソッドが再帰的に呼び出す必要があり、setImmediateを介して非同期に呼び出さなければならない状況があります。'this'はsetImmediateコールで失われますか?
次のコードは元のものとは関係ありませんが、同じ「問題」が発生します。「この」参照は2回目の呼び出しで失われているようです。
私は次の出力は、「this.someMethod」は、いくつかの点で、関数で停止したところで、私はそれを理解していないよ持ってfunction A() {
this.some_message = 'Index is: ';
}
A.prototype.someMethod = function (index) {
console.log(`${this.some_message} ${index}`);
setImmediate(this.someMethod, index + 1);
}
:
> new A().someMethod(1)
Index is: 1
undefined
> undefined 2
TypeError: "callback" argument must be a function
at exports.setImmediate (timers.js:664:11)
at Immediate.A.someMethod (repl:3:1)
at runCallback (timers.js:639:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)
>
私は変更することによって、それを解決しましたメソッドの最後の行に:
setImmediate(this.someMethod.bind(this), index + 1);
しかし、私はなぜsetImmediateがそのように振る舞うか分かりません。誰も私にそれについてのリンクを提供することはできますか?私は本当にどんな助けにも感謝します。私はその答えを見つけようとしていて、数時間もしてきました。前もって感謝します。
- 編集:また、より良いタイトルや修正をお勧めします。私は英語レベルがかなり低いです。
読む:そのためhttps://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout#The_this_problem – epascarello
おかげで...私は間違った方法で探していました! –