温馨提示:本文翻译自stackoverflow.com,查看原文请点击:javascript - Await / async on anonymous function
async-await asynchronous es6-promise javascript node.js

javascript - 等待/异步匿名功能

发布于 2020-03-27 11:57:53

我想在匿名函数上使用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 {域:null,_events:{完成:[Function:绑定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}}

查看更多

查看更多

提问者
Couteau
被浏览
94
2,123 2018-08-03 01:02

你等待的承诺,这是返回从异步函数,而不是异步函数本身。只需添加一个电话:

let x = await (async function() {return "hello"})();
console.log(x);
// or
console.log(await (async() => 'hello')())