我正在使用Dojo 1.8.1,并且经常发生在未被捕获的引用错误(例如:访问非现有函数/变量/对象成员)的情况下,脚本将在控制台上没有任何消息的情况下静默失败也没有错误,使调试过程变得更慢(更多)!
通常这发生在对函数的一系列调用之后(我可能是错的)它似乎在使用“dojo / request”对象的休息调用之后更频繁地发生。这种行为可能是随机发生的,因此未被捕获的引用错误可能会被抛出或吞没,而不会在同一行上进行任何预测,很可能是基于函数的调用者。
这里有一个我用所描述的问题做的例子:
define([ "dojo/dom", "dojo/dom-construct", "dojo/request", "dojo/ready" ],
function(dom, domConstruct, request) {
var prettyDate = function (millisecDate) {
// wrong: console won't display the error, script will stop
// uncaughtReferenceError['notExistingIndex'];
// uncaughtReferenceError.notExistingMethod();
// if commented, script will stop at "return" line without errors on console
var date = new Date(millisecDate);
// same here, if commented "return" should throw the exception
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
// any misspell on the "date" methods will cause the script to fail without logs (eg: getUTCYear() instead of getUTCFullYear())
return date.getUTCDate() + ' ' + months[date.getUTCMonth()] + ' ' + date.getUTCFullYear();
};
var startup = function(domNode) {
// uncaughtReferenceError['notExistingIndex']; // correct: console will display the error and script will stop
// uncaughtReferenceError.notExistingMethod(); // same here
request.get("rest/repository/", {handleAs: "json"}).then(
function(result){
var ul = domConstruct.create("ul", { }, domNode);
result.repositories.forEach(function(repo) {
domConstruct.create("li", { innerHTML : prettyDate(repo.lastUpdated) }, ul);
});
});
};
return { init: startup };
});
Dojo配置为isDebug为true,但没有区别:
<script>
dojoConfig = {
async : true,
isDebug : true,
parseOnLoad : true,
baseUrl : "js/",
packages : [ { name : "dsmonitor", location : "dsmonitor" } ]
};
</script>
这里是正确的页面(一切正常,代码是最顶层的):
如果我将错误放在启动方法中(页面加载将停止但显示错误,则启动时未注释uncaughtReferenceError):
这里如果我把错误放在prettyDate函数中(页面加载将停止并且没有显示错误,则在prettyDate中没有注释uncaughtReferenceError,实际情况下的调试会变得很糟糕):
我不知道我是否是遇到这个问题的唯一一个人,或者我做了什么特别错误的事情,但是在我的许多项目中都会发生这种情况(而且我被迫放入了大量的console.log打电话来了解发生了什么)我无法在互联网上找到任何可能的解决方案!
答案 0 :(得分:0)
我发现从外部服务器导入dojo库时会发生这种情况(例如: // ajax.googleapis.com/ajax/libs/dojo/1.8.1/dojo/dojo.js)。
如果我想在休息回调失败时在控制台中看到非预期错误,我必须在网站的同一服务器/端口上安装dojo库。
由于这会减慢Eclipse中的开发速度(验证完整的库很慢),我发现webjar可以缓解一点喧嚣!
希望它有所帮助!
答案 1 :(得分:0)
您可能遇到问题,因为您的代码在DOM准备好使用之前不会等待。
您正在使用:
define(["dojo/dom", "dojo/dom-construct", "dojo/request", "dojo/ready"],
function(dom, domConstruct, request) {
});
根据Dojo domReady页面,你应该像这样使用domReady插件:
define(["dojo/dom", "dojo/dom-construct", "dojo/request", "dojo/domReady!"],
function(dom, domConstruct, request) {}
);
作为替代方案,如果你想使用ready函数,你必须这样做:
define(["dojo/dom", "dojo/dom-construct", "dojo/request", "dojo/ready"],
function(dom, domConstruct, request, ready) {
ready(function() {});
});