没有真正的异步
router.get('/track', async (req, res) => {
track( ...req.query );
res.type('image/png').send('1');
});
function track(){
setTimeOut(()=>{
// do something
},2000)
}
由于nodejs的异步机制,setTimeOut挂载到任务队列里面,track算执行完成了,直接走到res.send这一步了
执行完成,这玩意直接算是释放掉了,导致track的setTimeOut里面的实际上未执行
正确的做法应该是
router.get('/track', async (req, res) => {
await track( ...req.query );
res.type('image/png').send('1');
});
function track(){
return new Promise((resolve)=>{
setTimeOut(()=>{
// do something
resolve()
},2000)
})
}