gpt4 book ai didi

javascript - 处理获取响应的正确方法是什么

转载 作者:行者123 更新时间:2023-12-03 22:20:44 25 4
gpt4 key购买 nike

我有以下用于处理 Magento 2 REST API 的代码。

return new Promise((resolve, reject) => {
fetch(uri, { method, headers, body: JSON.stringify(data) })
.then(response => {
return response.json();
})
.then(responseData => {
resolve(responseData);
})
.catch(error => {
reject(error);
});
});

我想添加响应状态检查,所以我开始这样
return new Promise((resolve, reject) => {
fetch(uri, { method, headers, body: JSON.stringify(data) })
.then(response => {
return {
data: response.json(),
ok: response.ok,
status: response.statusText
};
})
.then(responseResult => {
if (responseResult.ok) {
resolve(responseResult.data);
} else {
const error = responseResult.status || responseResult.data.message;
reject(error);
}
})
.catch(error => {
reject(error);
});
});

Magento 将错误文本保留在 data.message 中, 但是 response.json()给我一个 Promise而不是 data .

处理这种情况的正确方法是什么?

更新
像这样的回应
enter image description here

最佳答案

你正在成为 explicit Promise creation antipattern 的牺牲品.你不需要new Promise完全在该代码中,并添加状态检查,只需在 then 中执行处理程序:

return fetch(uri, { method, headers, body: JSON.stringify(data) })
.then(response => {
if (!response.ok) {
return response.json()
.catch(() => {
// Couldn't parse the JSON
throw new Error(response.status);
})
.then(({message}) => {
// Got valid JSON with error response, use it
throw new Error(message || response.status);
});
}
// Successful response, parse the JSON and return the data
return response.json();
});

现在:
  • 如果返回带有有效 JSON 正文的错误,我们尝试使用 message从解析的 JSON 作为错误(拒绝),回退到 response.status如果没有。
  • 如果正文返回的错误不是有效的 JSON,我们使用 response.status作为错误(拒绝)
  • 如果返回成功,我们返回解析结果
  • 关于javascript - 处理获取响应的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51811598/

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