javascript - Сollect 承诺会导致 foreach 循环,并且仅在执行 setState 之后
问题描述
我是 React 和 Promises 的新手。
我的目的是 - 从几个搜索服务收集对象数组,然后将整个数组传输到状态。
PNP.SearchResults
是一个承诺
在下面的代码中this.setState
执行较早,然后数组已准备就绪。如何解决?
private getSearchResults() {
const allSearchResults = []
this.state.resultSources.forEach(rSource =>{
this.props.searchService.search(this.props.AdditionalQuery, this.state.activePage, this.props.PageSize, rSource.sourceGuid).then((results: PNP.SearchResults) => {
allSearchResults.push({Results: results, sourceGuid: rSource.sourceGuid});
console.log("push");
}).catch(() => {});
})
this.setState({PrimaryResults2: allSearchResults} as any);
console.log("state updated");
}
现在console.log("state updated")
就早点开火console.log("push")
。但我需要反过来
解决方案
因为this.props.searchService.search
是异步功能。
您应该等待结果以确保数据返回。
private async getSearchResults() {
const allSearchResults = []
for (const rSource of this.state.resultSources) {
await this.props.searchService.search(this.props.AdditionalQuery, this.state.activePage, this.props.PageSize, rSource.sourceGuid).then((results: PNP.SearchResults) => {
allSearchResults.push({Results: results, sourceGuid: rSource.sourceGuid});
console.log("push");
}).catch(() => {});
}
this.setState({PrimaryResults2: allSearchResults} as any);
console.log("state updated");
}
推荐阅读
- java - RSA 算法:执行解密时明文无效
- sql - Oracle JOIN 输出优化
- c# - 在 UWP WebView 中来回拦截鼠标
- javascript - 将所有人标记为选中后复选框状态出现问题
- node.js - 如何保留反斜杠
- javascript - 在 super() 调用完成之前设置实例成员
- spring-cloud-stream - Spring Cloud 数据流流文件到 HDFS
- spring-boot - 是否可以使用 PATCH 修改实体?
- sqlite - 尝试在移动应用程序中使用 Vue 和 Sqlite 从现有数据库加载数据
- php - 为什么对图像的请求仍在访问我的 index.php 文件?