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(() => new Promise(resolve => setTimeout(resolve, 1000)))
約束の価値を「通過」したいなら、
.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(...)
これは、新しいプロミスを作成するまれな状況の1つです。
fetch() {
return axios.get('/rest/foo')
.then(value => new Promise(resolve => {
setTimeout(() => {
resolve(value);
}, delayInMilliseconds);
})
);
}
value
がプロミスである可能性がある場合、チェーンに.then(value => Promise.resolve(value))
を挿入します。
fetch() {
return axios.get('/rest/foo')
.then(value => Promise.resolve(value)) // ***
.then(value => new Promise(resolve => {
setTimeout(() => {
resolve(value);
}, delayInMilliseconds);
})
);
}