回答編集履歴
1
説明の改善
    
        answer	
    CHANGED
    
    | @@ -44,15 +44,14 @@ | |
| 44 44 | 
             
            array = divide(array, 3)
         | 
| 45 45 | 
             
            array = array.map(val => val.map(val2 => main(val2)))
         | 
| 46 46 |  | 
| 47 | 
            -
            //ここまで!あえてreduceループさせている処理を省いてます。
         | 
| 47 | 
            +
            //ここまで!あえてpromisewrapperに加工している処理と、reduceループさせている処理を省いてます。
         | 
| 48 48 |  | 
| 49 49 | 
             
            ```
         | 
| 50 50 | 
             
            navcaさんの想像とは違う挙動になっていると思います。
         | 
| 51 51 | 
             
            console.logが実行され、setTimeoutも実行されているのが確認できたと思います。
         | 
| 52 52 | 
             
            恐らく、navcaさんは`Promise`の引数はcallback関数のイメージだったのではないでしょうか。
         | 
| 53 53 |  | 
| 54 | 
            -
            `Promise`は処理の終了を教えてくれる、resolve,rejectされるまで待つ、という仕組みなだけでして、
         | 
| 54 | 
            +
            `Promise`は処理の終了を教えてくれる、resolve,rejectされるまで待つ、という仕組みの1パーツなだけでして、遅延評価される関数を包み込んだオブジェクト?(言葉の表現が下手ですみません)ではありません。この勘違いがなくなれば、きっとreduceを使ったPromiseなループ処理も怖くなくなると思います。
         | 
| 55 | 
            -
            この勘違いがなくなれば、きっとreduceを使ったPromiseなループ処理も怖くなくなると思います。
         | 
| 56 55 |  | 
| 57 56 | 
             
            理解の助けになるように、navcaさんの関数定義をそのまま使った場合で修正しますと・・・
         | 
| 58 57 | 
             
            ```js
         | 
