强制一个then()语句等待另一个语句的完成

时间:2019-06-21 20:24:50

标签: javascript reactjs firebase google-cloud-platform google-cloud-firestore

我正在使用React,并通过File >> project structure >> Gradle version 方法从Firestore数据库中获取数据。我有两个componentDidMount()调用,一个用于从数据库获得数据并且可以保存时的调用,另一个用于调整状态。

then()

但是,当我运行站点时,如果我不希望在保存数据库数据之后不执行此操作,它将首先尝试设置状态(第二条 componentDidMount() { db.collection("myCollection") .get() .then(function(querySnapshot) { querySnapshot.forEach(function(doc) { // doc.data() is never undefined for query doc snapshots console.log(doc.id, " => ", doc.data().field1); allData.push(doc.data()); }) }) .then( console.log("Setting State"), this.setState({ isLoaded: true, items: allData })) .catch(function(error) { console.log("Error getting documents: ", error); }); } 语句)。我不确定在保存数据库数据后如何强制执行状态更改。

我尝试过的事情:

1)将状态更改直接放在功能代码之后的第一个then()中。这给出了错误:

  

获取文档时出错:TypeError:无法读取未定义的属性“ setState”

1 个答案:

答案 0 :(得分:1)

您已经忘记将设置状态和控制台日志包装到另一个功能中。否则,您要传递两个参数,一个是console.log的结果,另一个是this.setState的结果。这些是您编写时的同步调用。