Я использую объект prom в node.js. У меня есть объект:Путаница по цепочке ошибок объекта обещания
var Send = {
send(post_ids) {
return Post.findById(post_ids)
.then((posts) => {
return sendArticlesToWechat(setupArticles(posts)); // sendArticlesToWechat is also a promise
})
.then((result) => {
console.log("RESULT: " + result);
})
.catch((err) => {
console.error("SEND ERROR: " + err);
return err;
});
},
}
export default Send;
и вызвать метод в другом файле:
Send.send(req.body)
.then((result) => {
console.log("CALL SEND: " + result);
})
.catch((err) => {
console.error(err);
});
При возникновении ошибки, я получил два вывода:
SEND ERROR: ERROR: // error message
CALL SEND: ERROR: // error message
Эта ошибка произошла в sendArticlesToWechat()
функция, которая будет возвращена. Потому что это обещание тоже, поэтому я могу catch
его ошибка снаружи. Это то, чего я ожидал.
Когда я вызываю Send.send()
, я ожидал получить ошибку в catch()
, но ошибка появляется в методе then()
.
В соответствии с выходом, ошибка вернулась с предыдущего catch()
, почему я не могу сохранить ее в catch()
?
да, это работает. Благодарю. Так какой, по вашему мнению, лучше? удалить 'catch()' или 'throw err'? –
Это может отличаться, но в этом случае я бы пошел с 'throw err'. Я бы выполнил вход в ваш объект 'Send' на всякий случай, если вызывающий код забыл написать' catch() '. Таким образом, по крайней мере в журналах появится ошибка. – pgreen2