質問: d.then(以下略)とすることでiのカウントが進むごとにthenチェーンがつながるのかな程度の想像で理解が止まってしまいます(そもそもその想像自体がまちがっているかもしれませんが)。 3即時関数への引数をbindで指定していますが、なぜそうする必要があるのかが分かりません。実際、.bind(null, i)の部分を(i)に変えたところ、d,c,b,aの順に表示されてしまいました。コールバック関数の引数を固定する場合bindを使うようですが、そもそもその理由が理解できていません。bindの基本的な使い方としてthisの対象を固定するというのは理解したのですが、引数について分からないままです......。 以上の点、お答え頂ける優しい方がいたらどうかよろしくお願いします。
回答: > > 1Promise.resolve()は、then()メソッドを呼び出すためにPromiseオブジェクトを返す役割を果たしていると解釈してよいのでしょうか。 > > > はい > > 2forを展開した時に... > > > ご想像の通り、then をつなげているだけです。 bind でわかりづらくなっていますが、 ``` d = d.then(() => new Promise((resolve, reject) => {setTimeout うんぬん}) ``` です。 > > 3即時関数への引数をbindで指定していますが、... > > > bind は元の関数のカリー化された新しい関数を作成して返すものです。第一引数は this, それ以降は関数の引数に紐付きます。 ``` const fun1 = function(x, y) { console.log(this, x, y); }; const fun2 = fun1.bind(1, 2, 4); fun2(); // [Number: 1] 2 4 ``` このようになります。 そのため ``` function(i){...}.bind(null, i) // () => {...} thisはnull ``` となります。