Val*_*y o 0 javascript node.js express
假设我有一个函数,可以从数据库中获取一些数据。
findById(id) {
return Model.findById(id)
}
Run Code Online (Sandbox Code Playgroud)
我需要重新组织这样的回报user data
:
{
name: "Tom",
age: 57
}
Run Code Online (Sandbox Code Playgroud)
变成这样:
{
message: "User is found successfully",
success: true,
user: user
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我可以用一个Promise "then"
部分来管理它,如下所示:
return Model.findById(id)
.then(user => {
if (!user) {
logger.warn(`Coundn't find user with id: ${id}`);
return { message: `Coundn't find user with id: ${id}`, success: false, user: null };
}
return { message: `User with id: ${id}`, success: true, user: user };
})
.catch(err => {
if (err) {
logger.error(err.message);
return { message: err.message, success: false, user: null };
}
})
Run Code Online (Sandbox Code Playgroud)
我可以用 a 做同样的事情async/await
并退回我重新生成的退货吗?因为到目前为止它user object
从数据库返回:
async findById(id) {
return await this.model.findById(id, function (user, err) {
if (err) {
console.log('test');
logger.error(err);
return { message: err.message, success: false, user: null };
}
if (!user) {
logger.warn(`Coundn't find user with id: ${id}`);
return { message: `Coundn't find user with id: ${id}`, success: false, user: null };
}
return { message: `User with id: ${id}`, success: true, user: user };
});
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
大多数数据库 API 不能同时支持回调和承诺。如果您传递回调,他们不会返回承诺。选择一种风格或另一种风格。您的第一种方法 using.then()
效果很好,因为这都是基于承诺的。
您的第二种方法不起作用,因为您正在传递常规回调。这告诉数据库不要返回承诺,因为您使用的是较旧的回调样式,但您正在尝试使用该承诺。
如果你想使用async/await
,你可以这样做:
async findById(id) {
try {
let user = await this.model.findById(id);
if (user) {
return { message: `User with id: ${id}`, success: true, user: user };
} else {
logger.warn(`Coundn't find user with id: ${id}`);
return { message: `Coundn't find user with id: ${id}`, success: false, user: null };
}
} catch(e) {
logger.error(err);
return { message: err.message, success: false, user: null };
}
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,您可以从第一个代码块中删除处理程序中的if (err)
测试.catch()
。如果.catch()
被触发,则存在错误 - 您无需测试是否存在错误。
归档时间: |
|
查看次数: |
34 次 |
最近记录: |