关键词搜索

源码搜索 ×
×

js异步赋值

发布2021-11-26浏览1148次

详情内容

为什么要异步赋值?是因为该值不能马上拿到。

应用场景:某被<iframe>嵌套的页面,提供一个js对象供外部访问。该对象需要做一定的运算才能完成初始化,因此采用异步操作,完成初始化后再通过父页面发射消息,通知相关组件来取值。

这段代码很简单,不值一哂,个人记录下来备忘。

1、被<iframe>嵌套的页面

var sheep = 0;//可供外部访问
getObj(sheep).then((goat) => {
    sheep = goat
    alert(sheep);//显示为1
    //发射一个消息
    window.parent.postMessage({
	    cmd: 'sheepIsReady',
	    params: {
	        success: true,
	        data: true
	    }
	}, '*');
});

function getObj(sheep){
    return new Promise((resolve) => {
    	//假设这里有大量且耗时的计算。。。
    	//最后计算出结果
        sheep = 1;
        resolve(sheep);
    });
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2、需要拿值的组件

<template>
    <div class="-map-container">
        <iframe :src="src" ref="iframe" @load="iframeLoad"></iframe>
    </div>
</template>

<script>
let iframeWin = null// 私有变量

export default {
  mounted () {
    window.addEventListener('message', this.handleMessage)
  },
  methods: {
    iframeLoad () {
      iframeWin = this.$refs.iframe.contentWindow
      window.console.log('iframe page loaded')
    },
    async handleMessage (ev) { // 接收来自iframe的消息
      if (ev.data.cmd === 'sheepIsReady') {
      	let mysheep = iframeWin.sheep
        //为所欲为
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载