用Promise异步加载其他js,比如百度地图等

前言

在开发一个Vue项目过程中,碰到只有一个模块需要调用BaiduMap,在index.html中引入BMap成本太高,所以需要实现一个异步加载百度地图的方法,网上查了下,发现已经有很多相关的代码了,但总有一点点问题,比如BMap not defined,或者再次进入后Bmap失效之类的…这里分享一个可以稳定运行的Bmap,import模块化引入,即开即用

bmap.js

let _promise;
export function mapLoader() {
  if (window.BMap) {
    return Promise.resolve(window.BMap);
  }
  if (_promise) {
    return _promise;
  }

  _promise = new Promise((resolve, reject) => {
    window.onload = function() {
      console.log("loadBmap Success", BMap);
      window.BMap=BMap;//注意需要在window中赋值一下
      resolve(BMap);
    };

    window.onerror = function(error) {
      console.log("loadBmap error", error);
      reject(error);
    };

    let script = document.createElement("script");
    script.type = "text/javascript";
    script.async = true;
    script.src =
      "https://api.map.baidu.com/api?v=2.0&ak=你的ak&callback=initBMap";//src里必须要有callback=initBmap,也有说=initialize的,自己试一下,我是用initBmap
    document.body.appendChild(script);
  });

  return _promise;
};


使用

import mapLoader from "@/util/bmapLoader";
//...
 mounted() {
    mapLoader().then(function() {
        console.log(BMap);//这里的Bmap对象是window.BMap
        var pointCurrent = new BMap.Point(123, 123); // 创建点坐标A 用户位置
        var pointEnd = new BMap.Point(123, 123);
        console.log(pointCurrent ,pointEnd);
      });
  },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值