我有一个工人的代码。
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
声明。
我的问题 - 无论如何都要抓住这个问题吗?
答案 0 :(得分:1)
写作时
run().then(x=>{}, y=>{}).catch(z=>{console.error('promise caught')});
您的论据y=>{}
实际上意味着&#34;吃掉所有错误&#34;。如果你想看到错误,你应该写
run().then(x=>{}).catch(z=>{console.error('promise caught')});