我想知道我下面写的是不是向API发出请求的正确方法。如果不正确,请帮助并建议任何不正确的地方。
function readQuoteFromRSS(rssUrl) {
fetch(rssUrl).then(function(response) {
return response.json();
}).then(function(response) {
setStore(response);
});
}
这基本上是好的,除了不幸的是它成为了我在Ivar给你的链接中描述的fetch
API footgun的受害者-fetch
只拒绝其对网络错误的承诺,而不是HTTP错误,如404或500。所以你必须检查响应对象上的HTTP错误。
其他几点:
-
处理拒绝或从函数返回承诺链是很重要的,这样调用者就可以(通常你想做后者,但如果这是一个像事件处理程序这样的入口点,没有地方可以传递它,你必须在本地处理它)。
-
我可能不会在最后的
then
中使用response
作为参数的名称,因为它不再是一个响应对象,因为它在以前的处理程序中。也许是data
。
function readQuoteFromRSS(rssUrl) {
return fetch(rssUrl) // *** return
.then(function (response) {
if (!response.ok) { // *** check
throw new Error(`HTTP error ${response.status}`); // *** for HTTP
} // *** error
return response.json();
})
.then(function (data) {
setStore(data);
});
}
纯粹是风格问题,因为现代环境支持async
/await
,我可能会使用它:
async function readQuoteFromRSS(rssUrl) {
const response = await fetch(rssUrl);
if (!response.ok) {
throw new Error(`HTTP error ${response.status}`);
}
const data = await response.json();
setStore(data);
}