Vue中如何解决子组件业务操作依赖于网络请求获取的provide数据

46 阅读1分钟

业务场景:在项目中,我们可能会遇到这种情况,某个数据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();
            }
        })
    })
},