2016-02-27 2 views
0

У меня этот код у работника.Выполнение команды 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 блока.

Мой вопрос - Есть ли способ сделать этот улов?

+1

Вы показываете нам декларацию 'Run()', но тогда вы вызываете функцию с другим именем, 'runComplete()'. Кроме того, где объявляется «результат» и присваивается значение? – nnnnnn

+0

Это немного сложно, этот код находится в рабочем состоянии. Я добавил больше кода в упрощенном виде. Пытаясь упростить это, я сделал эту опечатку. Я починил это. @nnnnnn – Noitidart

+1

ваш обработчик во втором аргументе для '.then' обрабатывает ошибку. –

ответ

1

Когда вы пишете

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

ваш аргумент y=>{} на самом деле означает "съесть все ошибки". Если вы хотите, чтобы увидеть ошибки, вы должны написать

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

Ни в коем случае! Работая с обещаниями так долго, я не могу поверить, что не осознавал этого! Это исправлено, спасибо! – Noitidart

Смежные вопросы