gpt4 book ai didi

javascript - 处理/捕获错误而不重复代码?

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:11 25 4
gpt4 key购买 nike

考虑以下(伪)函数来更新数据库:

function my_function(req, res, input) {
try {
// This sanitizeInput() function throws error message if input is invalid
sanitizeInput(input);
catch (err) {
res.status(500).json({id:"sql_error",message:err});
return;
}

dbCreateRowPromise(input)
.then(result => {//Handle success})
.catch(err => {res.status(500).json({id:"sql_error",message:err}})
}

正如您所看到的,我编写了两次 catch,并且两次都编写了相同的响应 500 状态并以相同的方式处理 catch。有什么好的方法可以将这两个捕获合并为一个捕获吗?

最佳答案

请注意,按照您当前编写代码的方式,您不会返回任何内容,并且任何后续语句都将假定一切正常,因为您已经在处理 catch 并转换响应。

我认为你可以按以下方式重写你的陈述:

function sanitizeInput( input ) {
if (input % 2 === 0) {
throw 'Cannot input even number';
}
return input;
}

function dbCreateRowPromise( input ) {
return Promise.resolve(input);
}

function my_function( input ) {
return Promise.resolve(input)
.then( sanitizeInput )
.then( dbCreateRowPromise );
}

// perfectly normall input
my_function(5)
.then( out => console.log(out))
.catch( err => console.log('error occured', err));

// errourness input
my_function(4)
.then( out => console.log(out))
.catch( err => console.log('error occured', err));

只需使用 Promise 构建事件链,然后抛出错误。如果被调用者不处理,错误最终将显示在控制台中。

关于javascript - 处理/捕获错误而不重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46794726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com