问题描述
所以我这里的代码返回一个 Promise 并且因为我使用then
语法我不知道为什么会发生这种情况:-??
fetch('someurltoAJsonFile.json')
.then(function(response) {
console.log(response.json());});
1楼
node-fetch 库中的 response.json() 也返回一个承诺,而不是尝试
fetch('someurltoAJsonFile.json')
.then(response => response.json())
.then(data => {
console.log(data)
});
您可以查看有关它的更多详细信息
编辑:
似乎返回的响应不在有效的 json 中,因此为了完整起见,这里是文本代码
fetch('someurltoAJsonFile.json')
.then(response => response.text())
.then(data => {
console.log(data)
});
2楼
给出的函数then
参数将被异步执行(在某个时候,当你的服务器返回的响应未来),但then
自己立即返回承诺(以同步方式),其
如果您希望代码看起来不那么嵌套(更多是同步代码),您可以使用 await 但您必须使用 async 函数使整个代码不透明
async function load()
{
let response = await fetch('someurltoAJsonFile.json');
let data = await response.json();
console.log(data);
}
3楼
争论这是否有资格作为答案,但我今天遇到了类似的情况,导致我提出这个问题,即使我的问题最终与环境有关。
如果您看到 promise 未决并且您的代码是正确的,并且您花了太多时间试图找出 console.log 未显示的原因,请仔细检查您是否在 chrome 的开发工具中打开了“信息”。 我只打开了警告,所以我没有看到我的 console.log。
4楼
这段代码有效并展示了一种很好的方式来获取并获得承诺,而不会出现未决问题。
如果您有 cors 问题,请在您的服务器中运行此代码在谷歌浏览器中下载此扩展程序“允许 CORS:访问控制允许来源”
async function invoices() { let response = await fetch('https://blockchain.info/latestblock?utm_medium=referral&utm_campaign=ZEEF&utm_source=https%3A%2F%2Fjson-datasets.zeef.com%2Fjdorfman'); let data = await response.json(); console.log(data); return data; } invoices().then(data => { console.log(data); });