我在它的响应主体中有一个返回这种有效负载的API:
{ "id": 1, "name": [{ "locale": "en", "value": "example" }] }
我在React应用程序中使用以下代码调用这个API:
async function getAsync(url) {
return fetch(url, {
method: "GET",
mode: "cors",
credentials: "include",
headers: {
...commonHeaders, // Just for auth
},
})
}
async function getResponse() {
const url = `...` // API url
let res
try {
res = await getAsync(url)
switch (res.status) {
case 200:
const resBody = await res.json()
return Promise.resolve(resBody)
...
default:
return Promise.reject(new GenericError())
}
} catch (err) {
return Promise.reject(new GenericError())
}
}
问题是:当我在控制台JSON.stringify(resBody)
中打印时,我得到了正确的有效负载(当然是JSON字符串),但是如果我打印resBody
,它的属性name.locale
有我的地区("it")而不是"en"!
为什么会这样?这是怎么回事??
这种情况发生在Firefox (85.0.2)和Chrome (88.0.4324.150)中,而Safari (14.0.2)则不然。
发布于 2021-02-16 09:51:59
我已经找到原因了!这是在我的UI中一个完全不同的异步函数中出现的一个不良副作用,这是由这些非常错误的比较引起的(请注意,=使用而不是===):
{
name_en: name.filter(item => item.locale = "en").value || "",
name_it: name.filter(item => item.locale = "it").value || "",
}
https://stackoverflow.com/questions/66226697
复制相似问题