Promise.all()和setState()react-native

时间:2016-09-05 19:36:43

标签: javascript react-native promise setstate

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

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

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

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

有谁知道为什么?我对React-Native有点新意,所以会喜欢一些输入!

3 个答案:

答案 0 :(得分:2)

当您使用async / await时,您根本不应该致电then。如果您仍想使用它,则需要传递回调;但是你的代码应该简单如下:

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

答案 1 :(得分:1)

你应该这样改变:

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

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

答案 2 :(得分:0)

then(
  this.setState(...)
)

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

您需要将函数或lambda传递给调用then()的{​​{1}}。