前言
日常积累,欢迎指正
Promise.all的使用场景
某方法需要在多个异步操作完成后执行就可以使用Promise.all
来优雅的解决,对应的还有一个Promise.race
,关于它的使用和使用场景暂不讨论
实例
我的实例场景
在实现 GIS 功能中的空间查询时,我的查询对象是两个服务,并且对这两个服务的查询操作都是异步的。任意一个服务查询结果存在就代表我的空间查询操作是成功的,查询操作成功后我需要使用 InfoWindow 来展示我刚才查询到的结果。这就意味着我需要等待两个异步全部完成后才能做后续操作。
我的代码实例
this.调用的变量理解成全局变量即可
//
this.map.on('click', (evt) => {
this.evt = evt
const circle = new Circle(evt.mapPoint)
this.queryExtent = circle.getExtent()
if (this.isQuery) {
this.queryservices(layerTreeData, this.queryExtent) // 方法调用
}
})
queryservices = (data, queryExtent) => {
if (data && data.length > 0) {
const qureyLayers = data.filter(item => item.isQuery) // 获取所有可查询数据源
const functions: any = []
for (const queryLayer of qureyLayers) {
const f: any = this.queryservice(queryLayer.owsurl, queryLayer.layers, queryExtent)
functions.push(f)
}
Promise.all(functions).then((res) => {
const features: any = res.filter(item => item)
if (featur