【发布时间】:2020-04-30 21:31:07
【问题描述】:
只有在出现网络或服务器错误时,提取 API 请求才会失败。例如,如果我执行以下代码,假设它通过try 块没有错误,我将得到一个有效的填充res。
try {
const res = await fetch('/createurl', {
method: 'POST',
body: 'testData',
headers: {
'Content-Type': 'application/json'
}
})
if (res.ok) {
alert('Resource created!')
} else {
alert('Error creating resource!')
}
flashResponseToUser(res)
} catch(e) {
alert('A server or network error occurred during the request!')
}
我正在处理res 以使用flashResponseToUser(res) 函数向用户显示必要的error 或success 消息。由于res.json() 返回一个Promise,flashResponseToUser 必须是一个异步函数。
const flashResponseToUser = async(res) => {
const jsonRes = await res.json() // Get data from response
console.log(jsonRes)
}
我想知道:
- 为什么
res.json()返回Promise,因为此时客户端已经收到响应? - 在什么情况下
res.json()返回的Promise会失败? - 由于我使用的是
res.json(),flashResponseToUser(res)中的代码是否也需要包装在try-catch块中?
【问题讨论】:
-
developer.mozilla.org/en-US/docs/Web/API/Body 这将能够帮助您解决这些问题。
-
@Siege21x 我确实读过,但它仍然没有解释为什么 res.json() 返回一个 Promise 而不是直接返回数据。也没有告诉我们 res.json() 在什么情况下失败。
标签: javascript promise fetch-api