I'm trying to use await on an anonymous function here are the results :
This is the way that works
async function hello(){
return "hello";
}
let x = await hello();
console.log(x);
result :
"Hello"
This is the way i want it to work :
let x = await async function() {return "hello"};
console.log(x);
result :
[AsyncFunction]
What am i missing ? I'm new to promises.
EDIT : I tried adding the () after the anonymous function to call it. Here is the example with the actual Async code :
let invitationFound = await (async function (invitationToken, email){
return models.usersModel.findOneInvitationByToken(invitationToken, email)
.then(invitationFound => {
return invitationFound;
})
.catch(err =>{
console.log(err);
});
})();
console.log(invitationFound);
return res.status(200).json({"oki " : invitationFound});
Result of the console.log :
ServerResponse { domain: null, _events: { finish: [Function: bound resOnFinish] }, _eventsCount: 1, _maxListeners: undefined, output: [], outputEncodings: [], .....
Result of the res.code..
handledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
I don't think the error come from models.usersModel.findOneInvitationByToken because it works fine when i use it in the first case
let userFound = await test(invitationToken, email);
EDIT 2 :
I found out the second problem ! I forgot to put the parameters into the parenthesis
let invitationFound = await (async function (invitationToken, email){
return models.usersModel.findOneInvitationByToken(invitationToken, email)
.then(invitationFound => {
return invitationFound;
})
.catch(err =>{
console.log(err);
});
})(invitationToken, email);
console.log(invitationFound);
return res.status(200).json({"oki " : invitationFound});
result :
{ oki : {mydata} }
You await Promises , which are returned from async functions, not the async function itself. Just add a call:
let x = await (async function() {return "hello"})();
console.log(x);
// or
console.log(await (async() => 'hello')())
You are not calling a function in the second case:
let x = await hello();
This is how you are accessing it in the first case but in the second case, you are just you are adding await to a function declaration. It is just returning function, you need to change it to
let x = await (async function() {return "hello"})();
console.log(x);
You can use Promise and await like this:
async abc function() {
return new Promise(resolve => {
setTimeout(() => {
resolve('hello');
}, 2000);
});
}
let x = await abc();
console.log(x);
// OR
let y = await (async function() {return "hello"})();
console.log(y);
// OR
console.log(await (async() => 'hello')())
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.