我正在编写一个使用require.js作为我的加载框架的移动混合应用程序。我有加载错误的问题。我正在尝试做的是在设备离线时设置后备解决方案,我无法下载需要在屏幕上显示地图的google maps 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需要使用异步插件来完全加载,我无法使它与插件一起使用。
答案 0 :(得分:6)
您可以通过以下方式捕获错误:
requirejs.onError = function (err) {
if (err.requireType === 'timeout') {
alert("error: "+err);
}
else {
throw err;
}
};
希望这有帮助!
答案 1 :(得分: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);
});
答案 2 :(得分:2)
我遇到了同样的问题,我用这个片段解决了这个问题:
require(['async!http://maps.google.com/maps/api/js?sensor=false'], function() {
//Success processing
}, function (e) {
//Error processing
});
答案 3 :(得分:1)
我相信你原来的问题从来没有完全按照你想要的方式解决,我们在这里遇到了同样的问题。基本上,当谷歌地图超时或不可用时,我们想要一种优雅地恢复的方法,因为有时我们的应用程序将在用户的机器上运行,在那里他们没有互联网访问权限。
我最初使用的是异步!其他人都使用的插件,但无法提供允许我需要的错误处理的修改。
因此,我编写了自己的实用程序类,它在requireJS容器之外异步加载谷歌地图,并提供错误回调处理。看看它是否能解决您的问题。对我们来说,它允许我们在无法访问maps.google.com时为用户呈现一个漂亮的警告视图,并且应用程序的其余部分仍然正常加载:
答案 4 :(得分:0)
RequireJS文档有a section on errors,它将涵盖您的特定情况。
如果CDN不可用,请详细说明falling back to a local copy of jQuery。