2016-06-21 3 views
0

Я упростил сценарий в приведенном ниже коде, потому что у меня нет места для объяснения моего варианта использования, но в основном я бросаю сообщение об ошибке " поймать "блок обещания. Как я могу получить ошибку, чтобы получить передачу из этого блока catch (в приведенном ниже примере я хочу, чтобы сообщение об ошибке сообщалось из внешнего блока catch из «try/catch», который я завернул с моим кодом):«throw new Error()», пойманный в контексте блока catch

var p = new Promise(function(resolve, reject) { 
 
    setTimeout(function() { 
 
    reject(); 
 
    }, 1000); 
 

 

 
}); 
 

 
try { 
 
    p.then(function() { 
 
    console.log('promise resolved'); 
 
    }).catch(function() { 
 
    throw new Error('I want to get out of this catch block!'); 
 
    }); 
 
} catch (err) { 
 
    console.log('I want to report the error from here' + err.message); 
 
}

+2

'try..catch' является синхронным заявлением, вы не можете этого сделать. Однако вы можете связать другой '.catch()' – elclanrs

+0

. Я отбросил ваши последние изменения. Вы задали понятный вопрос, получили ответ, который вы приняли. Сообщество не видит в хороших легких радикальных изменениях вопроса, когда есть ответы, которые фактически решают проблему, выраженную в вопросе, и особенно когда есть * принятый * ответ. Кроме того, новый вопрос является дубликатом [этого] (http://stackoverflow.com/questions/26571328/how-do-i-properly-test-promises-with-mocha-and-chai). Просто верните обещание: Мокка примет отказ как провал. – Louis

+0

мой плохой. Я думал, что мне все еще нужен ответ, но потом я понял ответ. – mags

ответ

1

в catch обработчики в Promise так же асинхронно, как и само обещание, так что вы не можете вернуться к синхронного управления потоком/исключения из них. Функция, которую вы передаете в .catch, не может быть вызвана до тех пор, пока не закончится try/catch.

+0

Да, вы правы. Мой пример плох. Я отредактирую свой пример. Я делаю тестирование с помощью mocha.js, и я хочу, чтобы ошибка была передана тестовому блоку. Тест является асинхронным. – mags

+0

@mags в этом случае вам нужно передать его в обратный вызов 'done', который предоставляет mocha. Бьюсь об заклад, есть пример этого на SO уже, что может вам помочь. – ssube

+0

Да, я действительно пытался заставить его вернуться как «ожидающий». Я думаю, мне нужно сделать это (новый Pending()). Я попробую это. – mags