将 fetch api 调用存储为局部变量的函数(不是承诺)

Function to store fetch api call as local variable (not promise)

我正在向数据库发送 api 请求,以便在小部件内接收数据,对数据执行一些处理,然后将其绘制并呈现到我的网页上。这是在反应网络应用程序中完成的。

我正在使用 fetch 获取数据并收到承诺。提取是在一个函数内完成的,稍后我将多次调用该函数。我已经找到了如何在进行 api 调用时直接从 fetch promises console.log 中获取数据的示例,但是在函数内部执行此操作似乎总是对我产生承诺......我不知道如何到return数据!

如能提供任何帮助,我们将不胜感激。我当前的代码如下,return是一个承诺。

谢谢。

class MyWidget extends Component {
    constructor(props) {
        super(props)
    }

async fetchData(url) {
    try {
        const response = await fetch(url);
        const data = await response.json();
        return data;
    } catch (error) {
        console.error(error);
    }
}

async readDB(url) {
    const data = await this.fetchData(url);
    return data
}

processingFunction() {
    const url = 'my/database/api/variable=X'
    const database_data = this.readDB(url)
    // perform processing on database data...
    // plot processed data...
}

你必须在 processingFunctionawait 也必须更改为 async

async processingFunction() {                      // change to async
    const url = 'my/database/api/variable=X'
    const database_data = await this.readDB(url); // await the async result
    // perform processing on database data...
    // plot processed data...
}

但你似乎根本不需要 readDB 函数

async processingFunction() {
    const url = 'my/database/api/variable=X'
    const database_data = await this.fetchData(url);

}

更新

您不能将 Promise 转换为 Array 或其他。 React 中有一个流程:state + life-cycle hooks。在这种情况下,您必须将数据存储在状态中并使用 componentDidMount hook

import React, {Component} from 'react'

class MyWidget extends Component {
  state = {
    dataFromDB: null // set initial state
  };

  processingFunction() {
    const yourData = this.state.dataFromDB;
    // perform processing on database data...
    // plot processed data...
  }
  
  async componentDidMount() {
    const url = "my/database/api/variable=X";
    const database_data = await this.fetchData(url);
    
    this.setState(() => ({
      dataFromDB: database_data // set data in state from DB
    }));
  }
  
  ...
}