簡體   English   中英

為什么此變量賦值會引發錯誤?

[英]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://... 

我已經嘗試通過調試並將變量openerACMEstatenullundefined來重現此錯誤,但是代碼不會拋出錯誤。 實際上應該處理空值/未定義的值。

我只能通過強行拋出這樣的錯誤來得到這樣的錯誤

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM