微软Bing地图API和加载模块的问题(Microsoft bing maps api and lo

2019-10-19 23:17发布

我建立一个商店定位器和加载自定义模块通过需要。 自定义模块依赖于地图和搜索模块从微软。 我讨厌回调地狱,要预先加载完成所有加载的模块返回一个承诺和行动自定义模块上。

使用蓝鸟的承诺规范,我试过几种方法Promise.methodPromise.promisifynew Promise(function(resolve, reject){Microsoft.Maps.loadModule({callback:resolve})})我似乎无法到得到任何他们的工作。

我的最新执行:

function loadSearch() {
            var resolver = Promise.defer();
            Microsoft.Maps.loadModule('Microsoft.Maps.Search', {
                callback: resolver.resolve
            });
            return resolver.promise;
        } /* end loadSearch */ 

        function loadDirections() {
            var resolver = Promise.defer();
            Microsoft.Maps.loadModule('Microsoft.Maps.Directions', {
                callback: resolver.resolve
            });
            return resolver.promise;
        }

Promise.all([loadSearch(), loadDirections()], function() {
        //do something
    });

结果Uncaught TypeError: Cannot read property '_tryFollow' of undefined bluebird.js任何人都可以指出什么在最新的代码明显的错误或在承诺的方式加载模块一个伪代码示例。

Answer 1:

两件事情,首先, Promise.all在蓝鸟不接受那样的第二个参数,它返回一个承诺,请尝试:

Promise.all([loadSearch(), loadDirections()]).then(function(results) {
    //do something
});

或更好

Promise.all([loadSearch(), loadDirections()]).spread(function(search,dirs) {
    //do something
});

所有的二,延迟的方法不绑定到延迟实例(JS具有动态此),使用的承诺,而不是构造函数:

function loadDirections() {
    return new Promise(function(resolve){
        Microsoft.Maps.loadModule('Microsoft.Maps.Directions', {
             callback: resolve // since this is not a method this is not bound
        });
    });
}

等等。 通常,最好是喜欢诺言构造了在蓝鸟递延接口。

总共:

function loadSearch() {
    return new Promise(function(resolve){
        Microsoft.Maps.loadModule('Microsoft.Maps.Search', {
            callback: resolve
        });
    });
} 
function loadDirections() {
    return new Promise(function(resolve){
        Microsoft.Maps.loadModule('Microsoft.Maps.Directions', {
            callback: resolve
        });
    });
}
Promise.all([loadDirections(),loadSearch()]).spread(function(dir,search){
     //both done, results here
});

对于它的价值 - 我刚刚提出的问题和更好的错误信息将在蓝鸟的未来版本中给出。



文章来源: Microsoft bing maps api and loading modules issue