【问题标题】:How to return a response from a fetch in javascript如何从javascript中的获取中返回响应
【发布时间】:2020-07-07 17:50:27
【问题描述】:

我无法在我的 React Native 项目中返回 API 调用的响应。

let response = fetch('http://3.133.123.120:8000/auth/token', {
    method: "POST",
    headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        client_id: 'NTMtzF7gzZPU9Ka35UFsDHvpR8e4D1Fy4OPRsurx',
        grant_type: 'password', 
        username: user, 
        password: pass, 
    })
})
.then((response) => response.json())
.then((response) => this.setState({jsonData: response}))
.then(() => alert('resposne jsonData: ' + JSON.stringify(this.state)));
alert('resposne jsonData: ' + JSON.stringify(response))

上面的代码在底部的 .then() 语句中返回了正确的响应,但是,我无法在 fetch() 语句之外使用数据。

我尝试在 fetch() 之外使用的任何东西(比如我在底线的警报)都给了我以下...

{"_40":0,"_65":0,_55":null,"_72":null}

另请注意,这一切都在 React 类组件中

【问题讨论】:

标签: javascript request fetch


【解决方案1】:

fetch 返回一个Promisehttps://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

那时您已经可以访问该 final 中的值了。如果您正在寻找一种在不使用回调的情况下使用以下值的方法,您可以考虑使用async/await 样式并将此代码包装在这样的函数中:

const fetchData = async () => {
  const results = await fetch() // put your fetch here
  alert(results.json());
};

获取信息https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

异步/等待信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await

【讨论】:

  • 我已经尝试过了,但是当我返回结果时,它给了我 {"_40":0,"_65":0,_55":null,"_72":null} 而在实际函数,它给了我正确的输出
  • 如果你删除最后的 2 个 then 语句,它会起作用吗?:.then((response) => this.setState({jsonData: response})).then(() => alert('resposne jsonData: ' + JSON.stringify(this.state)));
  • 它像返回数据一样工作。但是,我无法从函数中获取任何数据
  • @JohnS 我已经更新了答案,使其更具体到fetch,需要执行response.json() 才能真正从响应中获取json。我最初的回答更适用于一般的承诺。你可以在这里阅读更多内容。
猜你喜欢
  • 2015-03-01
  • 2019-09-29
  • 2023-02-09
  • 1970-01-01
  • 2016-09-13
  • 2018-08-06
  • 1970-01-01
  • 2020-11-26
  • 2016-08-15
相关资源
最近更新 更多