1. ホーム
  2. javascript

[解決済み] プロミスにディレイを追加する方法 [複製]

2023-08-01 20:23:46

質問

fetch() {   
    return axios.get('/rest/foo')
        //.then(response => {throw new Error(response)}) // Uncomment to test network error
        //.then( <<add delay here>> ) // Uncomment to simulate network delay
}

後者のthenブロックに遅延を追加して、フェッチ呼び出し側のthenブロックに制御を渡す前に指定時間待つようにするにはどうすればよいですか?

どのように解決するのですか?

のプロミスを返す。 then ハンドラで待機します。

.then(() => new Promise(resolve => setTimeout(resolve, 1000)))

もし、プロミスの値を "pass through" したい場合は、次のようになります。

.then(x => new Promise(resolve => setTimeout(() => resolve(x), 1000)))

このような至る所にある定型文を避けるために、ユーティリティ関数を書きましょう。

function sleeper(ms) {
  return function(x) {
    return new Promise(resolve => setTimeout(() => resolve(x), ms));
  };
}

のように使用します。

.then(sleeper(1000)).then(...)