【问题标题】:Fetch returns promise instead of actual data even after using 'then' [duplicate]即使在使用“then”之后,Fetch 也会返回 promise 而不是实际数据 [重复]
【发布时间】:2016-12-25 14:25:45
【问题描述】:

我正在我的组件中进行一个简单的 fetch 调用,看起来像这样

    var x = fetch(SOME_URL, SOME_POST_DATA)
             .then((response) => response.json())
             .then((responseJSON) => {return responseJSON});

    console.log(x);

调用成功执行,但控制台打印的是 promise 而不是数据。我在这里错过了什么?

【问题讨论】:

  • Promise 不会使任何东西同步,你无法获得价值。使用x.then(console.log)

标签: javascript react-native fetch react-android


【解决方案1】:

promise 的工作方式意味着您需要处理responseJSON 内部 then() 的处理程序。由于请求的异步性质,外部代码在 Promise 解决时已经返回。

一开始可能很难理解,但它与“传统”AJAX 请求大致相同 - 您在回调中处理响应。

以你为例:

var x = fetch(SOME_URL, SOME_POST_DATA)
    .then((response) => response.json())
    .then((responseJSON) => {
       // do stuff with responseJSON here...
       console.log(responseJSON);
    });

更多阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

【讨论】:

  • 确认必须转换,然后将此转换传递给下一个管道。
  • 被警告你不能在同一个响应对象上调用json()方法两次,它会抛出这个错误:(TypeError): Failed to execute 'json' on 'Response': body stream is locked。我在尝试 console.log 响应时遇到了这个问题。这不起作用:console.log(res.json()); return res.json() 这有效:const data = res.json(); console.log(data); return data。原因是json() 读取流完成:developer.mozilla.org/en-US/docs/Web/API/Body/json。在第一次调用后,主体被锁定。
猜你喜欢
  • 1970-01-01
  • 2021-03-17
  • 2021-04-28
  • 1970-01-01
  • 2017-09-10
  • 2022-01-22
  • 2019-07-29
  • 2021-10-17
  • 2019-11-03
相关资源
最近更新 更多