[英]Why is this variable assignment throwing an error?
我正在調查此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
來重現此錯誤,但是代碼不會拋出錯誤。 實際上應該處理空值/未定義的值。
我只能通過強行拋出這樣的錯誤來得到這樣的錯誤
throw new Error("Boom");
所以我的問題是,在什么情況下該行會引發錯誤?
編輯:我嘗試在使用Chrome測試時重現此錯誤。 剛剛意識到,如果未定義ACME,Internet Explorer將引發錯誤。
看起來我一直在用Chrome進行測試,但是IE不會在不拋出'TypeError'的情況下處理該語句
我已經按如下方式更改了作業,並且IE可以處理它
window.opener && (typeof window.opener.ACME == 'object') && window.opener.MOS.ACME
我知道promise可能吞沒錯誤 ,但是這里情況並非如此,因為即使通過擺弄IE控制台或將語句完全移出promiseed方法的主體,上述語句也會引發錯誤。 因此,我認為Q.defer()
是一個紅鯡魚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.