私は約束を読んでいて、フェッチして本当に混乱した。 Introduction to fetchから次のコードを取得しました。拒絶されたときに約束しているが、その後しか黙示していない
質問:status
が拒否された場合はどうなりますかpromise
? then(json)
はthen(status)
の後にチェーンされています。then(json)
はthen(json)
が実行されてから解決された約束を返すので何もしませんか?それとも、チェーンがちょうどthen
のすべてを通過し続けていて、ステータスが返されて約束が拒否された場合は、最後にcatch
に到達し、catch
はエラーをキャッチしますか?
私が間違っていた場合、このコードの正しい解釈は何ですか?約束は、それはチェーンの他に何も実行せず.catch()
に直接行く拒否され
function status(response) {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response)
} else {
return Promise.reject(new Error(response.statusText))
}
}
function json(response) {
return response.json()
}
fetch('users.json')
.then(status)
.then(json)
.then(function(data) {
console.log('Request succeeded with JSON response', data);
}).catch(function(error) {
console.log('Request failed', error);
});
以下「?*と、そのステータスが解決約束*をreturnes場合にのみ実行されます(JSON)、その後(JSON)は、それ以来何もしないという意味ではありません」 'json')は、約束が失敗したときに実行されません。しかし、何かが起こります。返される '.then(...) 'が拒否され、エラーが伝播するという約束です。 "*そうであれば、ステータスが拒否された約束を返すならば、チェーンはすべてのthensをそのまま通過し続けます。 – Bergi
'.then(status)'ステージが拒否された場合、 'onRejected'コールバックを' .then(json、onRejected) 'ステージに追加するだけで、拒否された約束を以前に処理し、もう一度試してみるなどの処置を取ることができます。 。 – Redu