我对javascript编程很陌生,我需要制作一个web应用程序。Node.js将用作js运行时环境。为了最大限度地减少调试所需的时间,随着应用程序的开发,我想实现一个健壮的错误处理方案。然而,由于我的背景有限,我不确定我正在实施的是最好的实践,还是它是否足够。因此,任何反馈都将被接受。
该函数是异步的,将使用catch来检测操作过程中是否发生任何错误。尝试捕获语句将用于捕获任何错误。这样做是为了允许从函数中识别单个错误。我的目标是将错误传播到调用函数,该函数将在最高级别的catch语句中处理它(在我的例子中,它被记录了*这最终会改变)。有任何反馈吗?
create: async function(req, res) {
let data = JSON.parse(req.body.data);
let result;
let request_body;
let sub_networks_lora;
try {
request_body = sub_network_api_request_data(data, 1);
result = await lora_app_server.create_applications(request_body)
.catch(err => {
//Error updating application on lora app server
throw err;
});
await db_sub_networks.create_sub_network(result.data.id, data.sub_network_name, data.network_id)
.catch(err => {
throw err;
//Error creating sub network in database
});
sub_networks_lora = await get_sub_networks()
.catch(err => {
throw err;
//Error getting networks from lora app server
})
sub_networks_lora = JSON.stringify(sub_networks_lora);
res.status(200).send({
sub_networks_lora
});
} catch (err) {
console.log(err)
} finally {}
}发布于 2018-11-02 23:45:13
try...catch将只处理一个错误,其余的(如果有的话)将是未察觉的错误。
一种方法是在Promise.all()函数中使用async和Array.prototype.map(),必要时将.then()中的throw错误链接到create()到.catch()。
async function create() {
let results = {resolved:[],rejected:[]};
let a = new Promise(resolve=>setTimeout(resolve,2000,1));
let b = Promise.reject(2);
let c = Promise.reject(3);
await Promise.all(
Object.entries({a,b,c})
.map(([k,p])=>
// `resolve` or `reject` an object having key
// set to variable declaration; e.g., `a`, `b`, `c`
// so we know which `Promise` is resolved or rejected
p.then(d=>results.resolved.push({[k]:d}))
.catch(e=>results.rejected.push({[k]:e}))
)
);
return results;
}
create()
.then(({resolved,rejected})=>{
console.log({resolved});
// `throw` errors to `.catch()` if necessary, here
if (rejected.length) {
throw new Error(
JSON.stringify(rejected))
}
})
.catch(e=>console.error({caught:e}));https://codereview.stackexchange.com/questions/206806
复制相似问题