2017-12-27 249 views
0

我有这个简单的例子,我的控制器和预期的NodeJS - 异步/等待内部控制器

export let create = async (req: Request, res: Response) => { 

    console.log("START"); 
    await setTimeout(() => { 
     console.log("MIDDLE"); 
    }, 1000); 
    console.log("END"); 
    return res.json({ data: null }); 

}; 

输出不起作用:开始,结束,MIDDLE

的处置:开始,中间,结束

+1

你期望什么? –

+0

我觉得很明显.... START ... MIDDLE ... END – Michalis

+1

'setTimeout'返回一个**数**,而不是一个承诺。只有当你“等待”一个承诺时,执行才会真正“等待”。 –

回答

2

尝试:

await new Promise(resolve => setTimeout(resolve, 1000))

0

您使用setTimeOut而不创建承诺对象,因此它正在等待setTimeOut值被返回(这是即时的),而不是等待承诺解决方案。这就是您的陈述不按照预期的方式工作的原因。你需要的是建立一个承诺:

function resolveAfterOneSecond(x) { 
    return new Promise(resolve => { 
    setTimeout(() => { 
     console.log("Middle"); 
     resolve(x); 
    }, 1000); 
    }); 
} 

async function f1() { 
    var x = await resolveAfterOneSecond(10); 
    console.log("End"); 
} 

console.log("Begin"); 
f1(); 

,然后设置你的函数,以等待承诺的回报,而不是setTimeout函数整数的回报。