这是调用API的正确方法吗?



我想知道我下面写的是不是向API发出请求的正确方法。如果不正确,请帮助并建议任何不正确的地方。

function readQuoteFromRSS(rssUrl) {
fetch(rssUrl).then(function(response) {
return response.json();
}).then(function(response) {
setStore(response);
});
}

这基本上是好的,除了不幸的是它成为了我在Ivar给你的链接中描述的fetchAPI footgun的受害者-fetch只拒绝其对网络错误的承诺,而不是HTTP错误,如404或500。所以你必须检查响应对象上的HTTP错误。

其他几点:

  1. 处理拒绝或从函数返回承诺链是很重要的,这样调用者就可以(通常你想做后者,但如果这是一个像事件处理程序这样的入口点,没有地方可以传递它,你必须在本地处理它)。

  2. 我可能不会在最后的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);
}

相关内容

  • 没有找到相关文章

最新更新