promise / block的catch语句都没有执行

时间:2016-02-27 20:15:16

标签: javascript promise

我有一个工人的代码。

var cBtnStore = {
    a: function(){}
};

现在注意到那里没有b键。

然后我在我的工作人员中有一个功能。它这样做:

function run() {
    ...
    self.postMessageWithCallback(function() {
        cBtnStore.b(); ////// there is no b key, this should prevent going to the return
    });
    ...
    return promise; // returns a promise
}

var gCB = {};
self.postMessageWithCallback = function(aMsgArr, aCB) {
      var gCBID++;
      aMsgArr.push(gCBID);
      gCB[gCBID] = aCB;
      self.postMessage(aMsgArr);
}

self.onmessage = function(msg) {
    var aCBID = msg.data.pop();
    gCB[aCBID].apply(msg.data);
};

然后我在工作人员中这样做:

try {
    run().then(x=>{}, y=>{}).catch(z=>{console.error('promise caught')});
} catch(err) {
     console.log('runComplete threw');
}
console.log('result:', result);

实际发生的事情 - 这会记录以设置runComplete()的返回值"result:" [Promise object]。 <{1}}和catch语句都不会执行。

我期待的应该发生的事情 - 它应该触发承诺或.catch阻止的catch声明。

我的问题 - 无论如何都要抓住这个问题吗?

1 个答案:

答案 0 :(得分:1)

写作时

run().then(x=>{}, y=>{}).catch(z=>{console.error('promise caught')});

您的论据y=>{}实际上意味着&#34;吃掉所有错误&#34;。如果你想看到错误,你应该写

run().then(x=>{}).catch(z=>{console.error('promise caught')});