为了账号安全,请及时绑定邮箱和手机立即绑定

使用 promise 与 async/await 时以不同方式获取解析 json

使用 promise 与 async/await 时以不同方式获取解析 json

PIPIONE 2022-01-13 17:03:23
问题已解决。这实际上是一个完全不同的问题,与 fetch/ajax/etc 无关,而是通过引用更新了不需要的对象。误导我的是,我使用的实际代码在 console.log 之后有一个后续步骤。随后的步骤改变了数据 json,结果 console.log 的值也改变了。它是通过深度克隆 json 来修复的。我仍然不确定的是为什么console.log 在数据更改之前出现但受到影响——猜测console.log 在这种情况下是异步的。=================== 原文:超级奇怪的问题。我的前端需要从后端获取数据,所以我使用了 fetch 的 Promise 链式风格,例如fetch(myUrl, {credntials: 'include'})  .then(res=>{    if(res.status==200){      return res.json()    }    else{      return null    }  })  .then(json=>{    if(json){      console.log(json)    }  })似乎工作正常,我得到了一些数据。但是,我注意到解析的 JSON 与来自后端的预期响应不同。例如,后端输出{'a': {'aa':1, 'bb':1}},并且解析res.json()给了我类似的东西{'a': {'aa':2, 'bb':1}}。更改似乎不一致,res.json()一次又一次尝试时我得到了不同的价值。然后我尝试了几种不同的方式来获取数据:1) 在浏览器地址栏中输入 url => 得到正确的数据2) 使用 jQuery ajax 方法而不是 fetch => 得到正确的数据3) 将承诺链更改为 async/await => 这也得到了正确的数据!let resp = await fetch(myUrl, {credentials: 'include'})let json = await resp.json()console.log(json)4)尝试了承诺链式提取,仍然不正确的数据!超级迷茫。我使用 fetch 错误吗?它是一个错误吗?是浏览器吗?是polyfill(我正在使用"whatwg-fetch": "3.0.0",但在Chrome,Mac上,理论上polyfill应该不会影响任何东西)?是响应头设置(Django、JsonResponse)吗?有没有人有类似的经历?
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

抱歉,原始问题具有误导性。找到真正原因并解决。请参阅问题中 11/28 的更新。


查看完整回答
反对 回复 2022-01-13
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

也许这是一个错字,您在此处列出的两个请求之间的凭据拼写不同:

fetch(myUrl, {**credntials:** 'include'})

与这里:

let resp = await fetch(myUrl, {**credentials:** 'include'})

如果这不能解决问题,请告诉我,但这似乎不太可能是 async/await 与常规 promise 的区别。


查看完整回答
反对 回复 2022-01-13
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号