В компании, в которой я работаю, все в настоящее время выполняется с обратными вызовами. Мы начинаем писать небольшие компоненты с обещаниями, от которых зависит большой код. У нас начались проблемы с ними.Как обернуть обещание обратным вызовом?
function getSomething() {
return Promise.resolve('hello')
}
function test(cb) {
getSomething()
.then(string => {
a.s
cb(null, string)
}, error => cb(error))
}
test((error, result) => {
console.log(error)
console.log(result)
a.s
})
Это простой пример проблемы. В этом коде, так как a не существует, он бросает предупреждение UnhandledPromiseRejectionWarning и убивает процесс. консольные журналы никогда не достигаются.
Логика заключалась в том, что если ошибка когда-либо произойдет, это вызовет обратный вызов catch.
function test(cb) {
getSomething()
.then(string => {
// a.s
cb(null, string)
}, error => cb(error))
.catch(error => cb(error))
}
Мне было рекомендовано использовать явный улов в конце цепочки обещаний. Проблема в том, что если в обратном вызове возникает ошибка, обратный вызов запускается дважды.
Спасибо за любую помощь.
Как обернуть весь затем в попытке, и ошибок на улов? –
Ну, может быть, вы не должны использовать обратный вызов 'onRejected' на этапе' then' и просто цепляйте '.catch()', как вы делали во втором фрагменте. – Redu
@Redu, переместите этот комментарий к ответу, потому что это правильный ответ. @ Второй фрагмент AlvaroOrtiz дважды прикрепляет обработчик ошибок 'cb'. – DaveS