Important Notice: this service will be discontinued by the end of 2024 because for multiple years now, Plume is no longer under active/continuous development. Sadly each time there was hope, active development came to a stop again. Please consider using our Writefreely instance instead.

JavaScriptのfor文の中でawaitしたらその分待たされる

タイトルの通りでございますけどもね。こんなコード。

async function waitASecond() {
    return new Promise(resolve => {
        setTimeout(resolve, 1000);
    });
}

async function main() {
    const nums = [1,2,3,4,5,6];

    for (let n of nums) {
        await waitASecond();
        console.log(new Date());
    }
}

main();

これ、どういう結果になるか分かりますか? 終わるまでに1秒かかる? 6秒かかる?

実行すると

% node await-in-for.js
2020-07-07T15:43:39.869Z
2020-07-07T15:43:40.887Z
2020-07-07T15:43:41.889Z
2020-07-07T15:43:42.890Z
2020-07-07T15:43:43.892Z
2020-07-07T15:43:44.894Z

こんな感じで一秒おきに出力される。