javascript - 在其他函数中响应组件异步等待

标签 javascript reactjs async-await

关于异步等待的简单问题,有很多使用异步等待与 React 的示例,但我很难让它工作。

componentDidMount = () => {

    const cards = mockCards;

    this.setState(
        {
            loading: false,
            cointrackerCards: [
                ...cards.map(
                    card => {
                        const price = await this.getCurrentSellPrice(card.coin, card.valuta, card.amount[card.coin])
                        return {
                            ...card, 
                            currentSellPrice: price
                        }
                    }
                )
            ]
        }
    )

}

getCurrentSellPrice = async (coinType, valuta, amount) => {
    //console.log(coinType, valuta, amount)
    try {
        const result = await coinbaseAPI.get('/prices/BCH-EUR/sell')
        //console.log(result.data.data)
        return result.data.data.amount
    }
    catch (err) {
        console.log('[ERRORHANDLER]', err)
    }
}

上面的代码抛出错误:语法错误:await是保留字(71:42)直接调用currentSellPrice键中的函数,也不起作用,因为它返回一个 Promise。我做错了什么?

最佳答案

你的问题:你不能在没有async作用域的情况下await某些东西,这就是你在/使用componentDidMount所做的事情。如果您想在 componentDidMount 中使用 await,请将其标记为 async。这是一个说明其工作原理的示例:

class AsyncState extends React.Component {
  state = {
    flag: false
  }

  async componentDidMount(){
    const flag = await this.changeFlagAsync();
    this.setState({flag})
  }

  async changeFlagAsync(){
    return new Promise((resolve, reject) => { // simulate async
      setTimeout(() => resolve(true), 2000)
    })
  }

  render() {
    return <div>
      {this.state.flag && <div>Done after 2 sec</div> || <div>Waiting for promise</div>}
    </div>;
  }
}

还有working fiddle

关于javascript - 在其他函数中响应组件异步等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024756/

相关文章:

javascript - 如何覆盖 og :url meta tag with reactjs

reactjs - 如何使用 `React.createElement` 子参数(不带 jsx)

reactjs - .next 文件夹在生产模式下在 CentOS 上使用 Docker 缺少一些文件

javascript - 使用 Javascript 的表中的动态类

javascript - 如何使用 PHP 检查引导模式窗口中的按钮是否被单击

reactjs - react-icons应用线性梯度

c# - 异步/等待并打开 FileStream?

c# - WCF 客户端阻止异步方法

node.js - 如何比较 : GET Data from 2 APIs,,POST bool

javascript - 如何拆分以逗号分隔的动态创建的字符串并将其放入动态创建的表 td 中的下一行?