Node.js / Express:中间件内的异步功能?

我想知道如何使异步函数在中间件中工作?通常在函数前面等待完成工作,但在中间件中似乎无法正常工作.

index.js:

const bob= require('../middleware/bob');
router.get('/',[bob(['channel1','channel2','channel3'])],async (req,res) => {
    console.log('3')
})

中间件/ bob.js:

async function test(){
    setTimeout(() => {
        console.log('1')
    },2000);
}

module.exports = function(channels){
   return async(req,res,next) =>{
        await test();
        console.log('2')

        next();
    }
}

当我运行此代码时.它将写入控制台:2 3 1

解决方法

等待等待承诺.从测试函数返回的承诺立即得到解决. async函数不应该知道在其中发生的任何异步进程的setTimeout,除了使用await或return链接的promise.

如果打算延迟它,它应该是:

async function test(){
    await new Promise(resolve => setTimeout(resolve,2000));
    console.log('1')
}

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...