【问题标题】:Promise.all() and setState() react-nativePromise.all() 和 setState() 反应原生
【发布时间】:2017-01-13 04:26:28
【问题描述】:

在一个组件中,我想使用 fetch API 从我的数据库中获取一些数据。获取所有数据后,我想使用 Promise.all() 更改组件的状态:

await Promise.all(data).then(
  this.setState({
    isLoading: false
  })
)

我的问题是 setState() 在 Promise 解决之前触发。但是这段代码可以工作,但是 isLoading 是一个数组而不是布尔值:

this.setState({
  isLoading: await Promise.all(data)
})

有人知道为什么吗?我对 React-Native 有点陌生,所以希望能有一些意见!

【问题讨论】:

    标签: javascript react-native promise setstate


    【解决方案1】:

    当您使用async/await 时,您根本不应该调用then。如果你仍然想使用它,你需要传递一个回调;但是您的代码实际上应该如下所示:

    await Promise.all(data);
    this.setState({
      isLoading: false
    });
    

    【讨论】:

      【解决方案2】:

      你应该这样改变:

      await Promise.all(data).then((result) => {
         this.setState({
           isLoading: false
         })
       }
      )
      

      基本上.then 有一个函数作为参数,因此您必须将setState 放入箭头函数中。

      【讨论】:

      • @AxelSun 不用担心!如果我的回答帮助您将其标记为正确,谢谢
      【解决方案3】:
      then(
        this.setState(...)
      )
      

      您正在调用setState()立即并将其结果传递给then()(就像任何其他函数调用一样)。

      您需要将函数或 lambda 传递给调用 setStatethen()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-10
        • 2019-01-08
        • 1970-01-01
        • 1970-01-01
        • 2017-02-20
        • 2023-03-20
        相关资源
        最近更新 更多