如果您将代码重写为
async
功能和用途
await
。大概是这样的:
async function retrieve() {
try {
const response = await fetch('api/register', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(jsonObj)
});
const responseClone = response.clone();
if (!response.ok) {
console.log(`HTTP ERROR STATUS CODE: ${response.status}`);
}
try {
const data = await response.json();
processDataFromServer(data, response.status);
} catch (rejectionReason) {
console.log('JSON Parsing Error:', rejectionReason, responseClone);
const bodyText = await responseClone.text();
console.log('Cannot parse as JSON:', bodyText);
}
} catch (error) {
console.log("Error: " + error)
deplayError(error);
}
}
retrieve();
没有
异步
正如你在评论中提到的,你想坚持
.then
链,这里有一个替代方案:
你可以结合承诺
response.json()
与
response.status
在数组中,并将其传递给
Promise.all
。这将解析为数据和状态。
所以改变一下:
return response.json();
到
return Promise.all([response.json(), response.status]);
并在下一个中接收解析的值
then
回调,通过更改以下内容:
.then(function (data) {
到
.then(function ([data, status]) {
…现在您可以访问
status
请拨打
processDataFromServer
.