Вы не можете попытаться / поймать исключение из Обещания, если не поместите его в функцию async
и await
.
Вот как вы строите этот поток, используя результат Обещания:
let idItem = "";
let statusInsert = "N/A";
let statusSms = "N/A";
let statusEmail = "N/A";
let msgErro = "N/A";
inserirEmergencia(req)
.then(iar => {
idItem = iar.data.ID;
statusInsert = "OK";
})
.catch(e => {
idItem = "0";
statusInsert = "Erro";
msgErro += " > " + e.message;
})
.then(() => res.json({
"idItem" : idItem,
"statusInsert" : statusInsert,
"statusSms" : statusSms,
"statusEmail" : statusEmail,
"msgErro" : msgErro
}))
Вот другой способ, с другим подходом к данным. Вы «трансформируете объект данных по умолчанию на основе ответа, а затем передаете его в res.json
вызов», так что вы можете сделать это:
const defaults = {
idItem: "0",
statusInsert: "N/A",
statusSms: "N/A",
statusEmail: "N/A",
msgErro: "N/A"
}
inserirEmergencia(req)
.then(iar => ({
...defaults,
idItem: iar.data.ID,
statusInsert: "OK"
})
.catch(e => ({
...defaults,
statusInsert: "Error",
msgErro: ` > ${e.message}`
})
.then(res.json)
Вот как вы это делаете с async/await
:
post('/emergencia', async (req, res) => {
const defaults = {
idItem: "0",
statusInsert: "N/A",
statusSms: "N/A",
statusEmail: "N/A",
msgErro: "N/A"
}
try {
const iar = await inserirEmergencia(req)
return res.json({
...defaults,
idItem: iar.data.ID,
statusInsert: "OK"
})
} catch (e) {
return res.json({
...defaults,
statusInsert: "Error",
msgErro: ` > ${e.message}`
})
}
}
Вы можете сжать это далее, вставив вызов в inserirEmergencia
:
post('/emergencia', async (req, res) => {
const defaults = {
idItem: "0",
statusInsert: "N/A",
statusSms: "N/A",
statusEmail: "N/A",
msgErro: "N/A"
}
try {
return res.json({
...defaults,
idItem: (await inserirEmergencia(req)).data.ID,
statusInsert: "OK"
})
} catch (e) {
return res.json({
...defaults,
statusInsert: "Error",
msgErro: ` > ${e.message}`
})
}
}
Последний скрывает боковой ввод, который не помогает сопровождающим - включая вас в будущем. Это не так уж плохо, но вы смешиваете преобразование данных с вызовом API, поэтому я бы не стал этого делать. Просто включите его, чтобы у вас было больше информации о том, что возможно, когда вы изучаете asyn c в JS.