微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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')
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐