javascript - 强制一个 then() 语句等待另一个完成
问题描述
我在我的componentDidMount()
方法中使用 React 并从我的 Firestore 数据库中获取数据。我有两个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);
});
}
但是,当我运行该站点时,它会首先尝试设置状态(第二then()
条语句),而我不希望它这样做,直到保存数据库数据之后。我不确定如何在保存数据库数据后强制进行状态更改。
我尝试过的事情:
1) 将状态更改直接放在函数代码之后,在第一个 then() 中。这给出了错误:
获取文档时出错:TypeError:无法读取未定义的属性“setState”
解决方案
您忘记将设置状态和控制台日志包装在另一个函数中。没有那个,您将向 then 传递两个参数,一个是 console.log 的结果,另一个是 this.setState 的结果。这些是您编写的同步调用。
推荐阅读
- javascript - 回调:函数如何访问其他函数?
- floating-point - 了解 Float>>asFraction 及其变体
- html - 如何使用 flex 构建多布局列?
- javascript - 使用按钮映射时如何通过子组件中的按钮显示/隐藏父组件中的组件?
- python - 如何处理 400 到 499 之间的错误(如果可能,也处理 500 到 599 之间的服务器错误)
- python - 在 Julia-1.5.3 中构建 ADCME 包的问题
- javascript - 使用纯 Javascript 和 CSS 点击或触摸时的视觉效果
- python - python sorted(带有for循环if语句的正则表达式expr)
- javascript - 需要帮助尝试编写带有日期和时间的脚本
- blockchain - 从构造函数的特定地址发送以太币