[英]Await / async on anonymous function
我試圖在匿名函數上使用await這是結果:
這是有效的方式
async function hello(){
return "hello";
}
let x = await hello();
console.log(x);
結果:
“你好”
這是我希望它工作的方式:
let x = await async function() {return "hello"};
console.log(x);
結果:
[AsyncFunction]
我想念什么? 我是新來的諾言。
編輯:我試圖添加匿名函數后調用()。 這是帶有實際異步代碼的示例:
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});
console.log的結果:
ServerResponse {域:空,_events:{完成:[功能:綁定resOnFinish]},_eventsCount:1,_maxListeners:未定義,輸出:[],outputEncodings:[],..
res.code的結果
handlePromiseRejectionWarning:TypeError:將圓形結構轉換為JSON
我不認為該錯誤來自models.usersModel.findOneInvitationByToken,因為在我的第一種情況下使用它時效果很好
let userFound = await test(invitationToken, email);
編輯2:
我發現了第二個問題! 我忘了把參數放在括號里
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});
結果:
{oki:{mydata}}
你等待的承諾 ,這是從異步函數返回 ,而不是異步函數本身。 只需添加一個電話:
let x = await (async function() {return "hello"})();
console.log(x);
// or
console.log(await (async() => 'hello')())
在第二種情況下,您沒有調用函數:
let x = await hello();
這是您在第一種情況下訪問它的方式,但是在第二種情況下,您只是將await添加到函數聲明中。 它只是返回函數,您需要將其更改為
let x = await (async function() {return "hello"})();
console.log(x);
您可以這樣使用Promise並等待:
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')())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.