【问题标题】:How to fix 'response.json is not a function' in async/await function如何修复异步/等待函数中的“response.json 不是函数”
【发布时间】:2019-06-05 05:58:12
【问题描述】:

试图将我的回复转换为 json。我不太确定我收到TypeError: response.json is not a function 错误。有人可以指出我正确的方向。提前致谢。

    componentDidMount(){
        this.timingFunction = setInterval(() => this.getAllStations(), 1000);
    }


    async getAllStations(){
        try{
            const response = await(`http:api.bart.gov/api/etd.aspx?cmd=etd&orig=${this.state.selectedStation}&key=${bartKey}&json=y`);
            const data = await response.json();
            console.log(`Here: ${data}`)


        }catch(e){
            console.log(`Error: ${e}`)
        }

    }

我希望看到 json 响应,但收到了错误消息。 编辑:在 response.json() 前面添加等待;却无处可去。

【问题讨论】:

  • 为什么使用 async.. 可以使用 promises 来完成..
  • @user7417866 确实如此。但是,这也应该适用于异步。
  • async 和 await 用于承诺不用于从服务器 / url 获取数据,最好的使用方法是 ajax 用于服务器获取代码。
  • 更具体地说,await 会导致异步函数暂停,直到 Promise 完成,但在您的情况下,它从 URL 获取响应而不是 Promise

标签: javascript reactjs


【解决方案1】:

您错过了对 fetch 的调用(或您用来从 api 获取数据的任何其他方法)。现在,您似乎将 await 误认为是一个函数。

const response = await(`http:api.bart.gov...

(您还缺少http 之后的两个斜杠,但这还不是问题。)

试试这个:

const response = await fetch(`http://api.bart.gov...

【讨论】:

  • 非常感谢你。我不敢相信我错过了
【解决方案2】:

您正在使用 await 作为函数

await 是一个系统只等待一个承诺,而不是做

const response = await('http:...');

你应该这样做

const response = await fetch('http:...');

【讨论】:

  • 非常感谢 FerryBig,我不敢相信我错过了。
  • You are using await as a function。不,这是await expressionexpression,这里是('http:...'),因为这里的大括号不相关等于await 'http:...'(就像const foo = ('bar') 等价于const foo = 'bar')。 await 表达式的右侧可以是任何类型的值,如果不是 Promise,则将其转换为已解析的 Promise。所以本质上等价于const response = await Promise.resolve('http:...');
猜你喜欢
  • 2023-03-13
  • 2019-11-28
  • 1970-01-01
  • 2018-09-29
  • 2022-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
相关资源
最近更新 更多