, async/await. async , - .
, , connection.query() - . :
app.get('/', async (request, response) => {
let result = await foo();
console.log("response ready");
});
let foo = async () => {
const myQuery = "SELECT * FROM my_table";
let results = await new Promise((resolve, reject) => connection.query(myQuery, (err, results) => {
if (err) {
reject(err)
} else {
resolve(results);
}
}));
console.log("query ready");
let res = await bar(results);
console.log("bar done");
return res;
}
let bar = (results) => {
console.log("inside bar");
return ThirdPartyAPI(result);
}
async/await. async/await , . , async. async , , ( , , , ). , , , .
async/await, :
- , ( ).
- async , .
- async , , ( , ).
:
1.sync, userId. validateParams true/false, validateParams2 , userId - undefined. validateParams3 : validateParams3().then(...).
let validateParams = (userId) => {
return userId;
}
let validateParams2 = (userId) => {
if (!userId) {
throw new Error('userId is undefined');
}
}
let validateParams3 = (userId) => {
if (!userId) {
return Promise.reject(new Error('userId is undefined'));
}
return Promise.resolve();
}
2.async . getUser ( userId ) ( userId - undefined). , getUser : createUser().then(...). getUser2 getUser3 , . , unhandledError, validateParams2 . getUser2 makred as async ( ), getUser3 .
let getUser = (userId) => {
if (validateParams(userId)) {
return db.getUserById(userId);
}
return Promise.resolve();
}
let getUser2 = async (userId) => {
validateParams2(userId);
return db.getUserById(userId);
}
let getUser3 = (userId) => {
return Promise
.resolve(userId)
.then(validateParams2)
.then(() => db.getUserById(userId);
}
3.async :
let updateUser = async (userId, userData) => {
let user = await getUser(userId);
_.extend(user, userData);
return db.saveUser(user);
}
:
let fn = async (userId, userData) => {
try {
let user = await updateUser(userId, userData);
console.log(user);
}
catch (err) {
console.log(err);
}
}
let fn2 = (userId, userData) => {
updateUser(userId, userData)
.then(user => console.log(user))
.catch(err => console.log(err))
}
}