6

我正在使用 require.js 作为我的加载框架编写一个移动混合应用程序。我有加载错误的问题。我要做的是在设备离线时设置一个后备解决方案,我无法下载我需要在屏幕上显示地图的谷歌地图 API 脚本。我得到的只是

Uncaught Error: Load timeout for modules: async!http://maps.googleapis.com/maps/api/js?sensor=true

但我无法捕捉到此错误并提供替代实现。这是我的 gmaps 模块定义

define('gmaps', ['async!http://maps.googleapis.com/maps/api/js?sensor=true'],function(){
  return window.google.maps;
});

我能做些什么?

编辑

感谢您的帮助,我设法找到了可能的解决方案。我已经设置了这样的要求

require.config({
    paths: {        
        gmaps: ['http://maps.googleapis.com/maps/api/js?sensor=true', 'lib/dummymaps']
    }
}

dummymaps 只是一个简单的模块:

define({
   dummy: true
});

然后在我的“父”模块中我做:

define(["gmaps"],function(gmaps){
    ...
    if(typeof gmaps.dummy != 'undefined' && gmaps.dummy == true){
        // use a local image as map
    } else {
        // initialize google maps canvas
    }
});

你认为这是一个好的解决方案吗?

编辑2:

原谅我,它不适用于此代码。它总是退回到替代实现,因为 gmaps 需要使用异步插件才能完全加载,而我无法使其与插件一起使用。

4

5 回答 5

8

您可以通过以下方式捕获错误:

requirejs.onError = function (err) {
    if (err.requireType === 'timeout') {
        alert("error: "+err);
    } 
    else {
        throw err;
    }   
};

希望这可以帮助!

于 2014-02-19T13:10:07.103 回答
2

您可以尝试以下方法:

requirejs.config({
    paths: {
        // define an alias here, first try remote, if it fails it will try your local file
        'gmaps': ['http://maps.googleapis.com/maps/api/js?sensor=true', 'your local file.js']
    }
});

define('gmaps', function(gm) {
    // var gm should now be the google maps plugin
    console.log(gm);
});
于 2013-08-20T11:09:03.713 回答
2

我有同样的问题,我用这个片段解决了它:

require(['async!http://maps.google.com/maps/api/js?sensor=false'], function() {
    //Success processing
}, function (e) {
    //Error processing
});
于 2015-05-06T11:49:15.023 回答
1

RequireJS 文档有一个关于错误的部分,它将涵盖您的特定情况。

如果CDN 不可用,它详细说明了回退到 jQuery 的本地副本。

于 2013-08-20T11:12:25.740 回答
1

我相信您最初的问题从未完全按照您的要求解决,我们在这里遇到了同样的问题。基本上,我们想要一种在谷歌地图超时或不可用时优雅地恢复的方法,因为有时我们的应用程序会在用户无法访问互联网的机器上运行。

我最初使用的是异步!其他人都使用的插件,但无法提出允许我需要的错误处理的修改。

因此,我编写了自己的实用程序类,它在 requireJS 容器之外异步加载谷歌地图,并提供错误回调处理。看看它是否能解决您的问题。对我们来说,它允许我们在无法访问 maps.google.com 时向用户呈现一个漂亮的警告视图,并且应用程序的其余部分仍然正常加载:

https://github.com/mag382/googleMapsLoaderUtil

于 2014-10-14T18:52:58.837 回答