У меня этот код у работника.Выполнение команды catch или обещание
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]
. Ни catch
, ни .catch
утверждения не выполняются.
То, что я ожидал, что должен был произойти - Это должно вызвало catch
заявления обещания или из try-catch
блока.
Мой вопрос - Есть ли способ сделать этот улов?
Вы показываете нам декларацию 'Run()', но тогда вы вызываете функцию с другим именем, 'runComplete()'. Кроме того, где объявляется «результат» и присваивается значение? – nnnnnn
Это немного сложно, этот код находится в рабочем состоянии. Я добавил больше кода в упрощенном виде. Пытаясь упростить это, я сделал эту опечатку. Я починил это. @nnnnnn – Noitidart
ваш обработчик во втором аргументе для '.then' обрабатывает ошибку. –