Node.js处理承诺的最佳方式



所以我的控制器中有这样的代码。

const Users = require("../models/users");    
class UserController() {
getUserById(req, res) {
const id = req.params.id;
const users = new Users();
const userData = users.getUserById(uid).then(function(result) {
//Do other logic here that depends on db result
return res.status(200).json({status:"success", user: result});
});
}
}

我的问题是,这和下面的有什么区别,哪种做法更好?

const Users = require("../models/users");    
class UserController() {
async getUserById(req, res) {
const id = req.params.id;
const users = new Users();
const userData = await users.getUserById(uid);
return res.status(200).json({status:"success",user:userData});
}
}

第二个函数调用使用了ES8的async await功能,这使我们的代码看起来像是synchronous和clean,而不需要执行.then((并在其中回调。不过,fetch((async await都在promise上工作。

Aync Await如果我能这样说的话,可读性会高得多。这里没有回叫。它只是等待第一个API调用发生,只有当数据到达(或Promise被解析(时,我们才会触发另一个API调用。对于程序员本身来说,使用Async-Await语法的生活就变得不那么容易了。

对于错误处理,您需要Aync-await中的try{} catch{}块,但在fetch((的情况下,.catch(([/strong>块为我们处理API错误。

最新更新