gpt4 book ai didi

javascript - 如何传递多重 promise 的错误?

转载 作者:行者123 更新时间:2023-12-03 00:27:42 25 4
gpt4 key购买 nike

所以基本上我试图通过传递错误值来创建错误处理程序,在我的例子中,错误值是状态代码的数字,例如 400、500 等。现在的问题是当catch捕获错误时,其中包含从先前的promise返回的状态代码值。当我记录该值时,它会正确记录该值,但是当我拒绝它并传递该值以便它将在下一个 Promise 的 catch 中捕获时,它表示该值未定义。

错误代码如下:

UnhandledPromiseRejectionWarning: RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined

JS:

const findFromModel = async (model, query) => {
return new Promise((resolve, reject) => {
model = model instanceof Object ? model : {};
if (model) {
model.findOne(query, (err, obj) => {
if (obj) {
resolve(obj);
} else {
reject(400);
}
});
} else {
reject(400);
}
});
}

const makeOrder = async (title, body, userQuery) => {
return new Promise((resolve, reject) => {
title = (typeof title === 'string' && title.length > 0) ? title : '';
body = (typeof body === 'string' && body.length > 0) ? body : '';
if (title && body) {
findFromModel(userModel, userQuery)
.then(user => resolve(user))
.catch(err => {
console.log(err); // logs 400
reject(err); // Undefined
});
} else {
reject(400);
}
});
}

履行 promise :

makeOrder('test', 'this is body', {id: 'test'})
.then(obj => res.send(obj))
.catch(err => res.sendStatus(err.message));

我刚刚从 es5 迁移到 es6,所以如果您有任何更好的想法来改进我的代码,我们将非常感激。

最佳答案

如果你想使用async功能,你可以减少更多的代码。

Promise 错误会变成异常,因此使用 try...catch 来处理它。

async函数返回实际上是解决 promise ,抛出错误实际上是拒绝它。 (就像它们在Promise中一样)

const makeOrder = async (title, body, userQuery) => {
title = (typeof title === 'string' && title.length > 0) ? title : '';
body = (typeof body === 'string' && body.length > 0) ? body : '';
if (title && body) {
try{
let user = await findFromModel(userModel, userQuery)
return user
}catch(err){
console.log(err); // logs 400
throw err;
}
throw 400;
}
}
<小时/>

即使你想使用旧的方法,通常也是这样完成的

return findFromModel(userModel, userQuery)
.catch(err => {console.log(err); throw err;});

关于javascript - 如何传递多重 promise 的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54022785/

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