gpt4 book ai didi

javascript - 被拒绝时的 promise 链,但随后才被实现

转载 作者:行者123 更新时间:2023-12-03 03:39:59 24 4
gpt4 key购买 nike

我正在阅读有关 Promise 和 fetch 的内容,并且感到非常困惑。我从 Introduction to fetch 得到以下代码.

我的问题是:如果 status 返回被拒绝的 promise 会发生什么? then(json) 链接在 then(status) 之后,这是否意味着 then(json)then 起不会执行任何操作(json) 仅当 status 返回已解决的 promise 时才执行?或者这是否意味着如果状态返回拒绝的 promise ,链将继续传递所有then,直到到达底部的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);
});

最佳答案

在我尝试理解 Promise 的早期,我认为 .then 链是两条链……成功和拒绝

拒绝或错误导致“执行”从成功“跳转”到拒绝

如果拒绝处理程序返回的值不是被拒绝的 promise ,则“执行”将“跳转”到成功链

注意:我最早接触的 Promise 没有 .catch ...因为 .then 实际上接受两个参数 onFullfilled onRejected - 如果其中任何一个不是函数,它将被忽略 -

因此,您的代码可以编写如下:

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()
}

function log(data) {
console.log(data);
}

function handleError(error) {
console.log('Request failed', error);
}

fetch('users.json')
.then(status, null)
.then(json, null)
.then(log, null)
.then(null, handleError);

现在很清楚,鉴于函数统计中存在错误,“被拒绝”链处于“效果”(我确实需要考虑更好的术语),并且 reject 中没有任何内容链直到最底部,因此,这是执行的下一个代码

Note .catch in some Promise libraries is simply the following

Promise.prototype.catch = function catch(onRejected) {
return this.then(null, onRejected);
};

关于javascript - 被拒绝时的 promise 链,但随后才被实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45670947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com