Node.js / Express: асинхронная функция внутри промежуточного программного обеспечения? - PullRequest
0 голосов
/ 07 октября 2018

Мне было интересно, как заставить асинхронные функции работать внутри middleware ?Обычно await перед функцией выполняет задание, но в middleware кажется, что оно не работает.

index.js:

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

middleware / 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

1 Ответ

0 голосов
/ 07 октября 2018

await ждет обещания.Обещание, которое возвращается из функции test, разрешается немедленно.Функция async не должна знать о setTimeout каких-либо асинхронных процессах, происходящих внутри нее, за исключением обещаний, связанных с await или return.

Если намерение состоит в том, чтобы отложить его,должно быть:

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