簡體   English   中英

等待/異步匿名功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM