业务场景:在项目中,我们可能会遇到这种情况,某个数据A,它是通过props接收到的,而且这个数据A,他是父组件的父组件的父父父父...组件传下来的,并且数据A的值还是从网络请求来获取的,而这时,子组件的一些操作,是需要依赖于数据A值的,A的值存在了,我们才要操作,不存在,就需要等待,面对这样的业务场景,我们该如何解决呢?
具体实现: 在我们公司项目中,数据A是地图实例对象,在组件中,我其实已经是获取到所有数据了,但是这时候地图实例对象还没获取到,我不能去在地图上绘制我的数据,所以我就要一直等待,等待地图实例对象拿到了,我才能绘制,我这里采用的是promise + 递归调用来解决
/***
* 地图插件初始化
* @param apiInstance
* @param baseView
* @param baseMap
*/
initPlugin() {
return new Promise(resolve => {
if (this.map) return resolve()
const getArcgisInstancePromise = new Promise((resolve1) => {
const checkInstance = () => {
const arcgisInstance = arcgisPluginModel.getArcgisEntity("baseMap");
if (arcgisInstance) {
resolve1(arcgisInstance);
} else {
setTimeout(checkInstance, 100);
}
};
checkInstance();
});
getArcgisInstancePromise.then(arcgisInstance => {
this.map = arcgisInstance;
this.drawAreaLayer = this.map.mapEntity.addGraphicLayer("drawAreaLayer", [], null, 997);
resolve()
});
})
},
mounted() {
this.initPlugin().finally(() => {
this.fullscreenLoading = false;
this.$nextTick(() => {
this.cleanDrawLayer();
if (this.detail.id) {
this.drawConnectFacilityLayer();
}
})
})
},