等待/异步匿名功能

Cou*_*eau 1 javascript asynchronous node.js async-await es6-promise

我试图在匿名函数上使用await这是结果:

这是有效的方式

async function hello(){
    return "hello";
}
let x = await hello();
console.log(x);
Run Code Online (Sandbox Code Playgroud)

结果:

“你好”

这是我希望它工作的方式:

let x = await async function() {return "hello"};
console.log(x);
Run Code Online (Sandbox Code Playgroud)

结果:

[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});
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

编辑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});
Run Code Online (Sandbox Code Playgroud)

结果:

{oki:{mydata}}

Jac*_*cob 8

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

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

  • 如果您使用“fetch”,则期望获得“serverResponse”。如果您想下载响应的内容,您需要调用其“.json()”或类似方法并等待。 (2认同)