我正在调查此javascript
行
parentWindowState = window.opener && window.opener.ACME && window.opener.ACME.state
如果你想看到函数的其余部分,那就是:
_doStuff: function () {
var someVar = '',
parentWindowState = window.opener && window.opener.ACME && window.opener.ACME.state,
deferred = Q.defer();
if (parentWindowState && parentWindowState.getItem('...')) {
//lots of code
} else {
deferred.resolve();
}
return deferred.promise;
}
用户报告收到此错误
Error at _doStuff (https://acme/anvils/yoloeditor/main_20160531050717.js:456321:13) at Anonymous function (https://acme/anvils/yoloeditor/main_20160531050717.js:111202:37) at _fulfilled (https://acme/anvils/yoloeditor/main_20160531050717.js:29048:13) at Anonymous function (https://acme/anvils/yoloeditor/main_20160531050717.js:29078:13) at promise.promiseDispatch (https://...
我尝试通过调试并将变量opener
,ACME
和state
设置为null
或undefined
来重现此错误,但代码不会抛出一个错误。它实际上应该处理null / undefined值。
我只能通过强行抛出像
这样的错误来获得这样的错误 throw new Error("Boom");
所以我的问题是,在什么情况下该行会抛出错误?
编辑:我在尝试使用Chrome时尝试重现此错误。刚刚意识到如果未定义ACME,Internet Explorer将抛出错误。
答案 0 :(得分:0)
看起来我一直在使用Chrome进行测试,但IE不会在不抛出'TypeError'的情况下处理此声明
我已按如下方式更改了分配,IE可以处理它
window.opener && (typeof window.opener.ACME == 'object') && window.opener.MOS.ACME
我知道promises可以swallow errors,但这不是这里的情况,因为上面的语句甚至会通过摆弄IE控制台或者将语句完全移出承诺方法的主体而引发错误。所以我认为Q.defer()
是一个红色的鲱鱼。