javascript - 没有从 promise 中获得正确的数据

标签 javascript json async-await ecmascript-2017

大家好,我正在使用await关键字来等待异步调用返回。我的 url 是 get url,因此如果我从浏览器调用它,则会返回 json。问题是,当我尝试从代码中获取数据时,它会返回一个 promise ,但我不知道如何从该 promise 中获取数据响应

getCustomerById: async (id) => {

    try {
      const response = await fetch("http://www.ready.buzlin.com/buzlinApp/customer/getCustomerById.php?k=xxx&id=xxx");
      // console.log("Response Returned: "+ JSON.stringify(response));
      // resolve(response.json());
        debugger;
      return response.json();
    } catch (err) {
    }
  }

现在这就是 json.reponse() 返回给我的内容

enter image description here

有人可以告诉我我做错了什么吗?谢谢

最佳答案

fetch(...) 返回一个promise,并且您可以使用await 来解开该promise,所以这很好。但 response.json() 也会返回一个 promise ,因此您可能还想对其使用 wait :

const response = await fetch(url)
const data = await response.json()
debugger
return data

注意:正如 Thomas 在评论中指出的那样 - 如果你只是在异步函数中返回 response.json() ,你不应该解开它 - 它只会被包装在另一个函数中无论如何都答应。只是因为您正在进入调试器并尝试检查它,所以您需要从 promise 中获取值。事实上,你的函数应该看起来更像这样:

getCustomerById: (id) => {
  const url = 'http://example.com/customer/' + id
  return fetch(url).then((response) => response.json())
}

关于javascript - 没有从 promise 中获得正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48264721/

相关文章:

javascript - 如何根据两个相互依赖的下拉列表的选择编写另一个元素?

javascript - 在启用滚动的情况下隐藏滚动条

javascript - 用 JSON 数据填充多个选择框

mysql - 在 MySQL (5.6) 数据库中存储 JSON 数组的数据类型

c# .net 4.5 async await Task.Wait() 阻塞问题

async-await - slim {#await}..{ :then} block duplicating html with new data

javascript - Discordjs 我的 react 收集器在我不希望它触发时触发

javascript - 另一个D3向强制有向图添加文本

ios - NSJSONSerialization + AFNetworking 无法识别的选择器错误

c# - Async/Await 最大并发 http 请求数