Асинхронизация узла-сельдерея, ожидание client.call() завершает свою внутреннюю функцию

Я использую node-celery 0.2.8 на моем сервере node.js, и я создаю, использую await на client.on(), надеясь, что код сначала будет поддерживать результаты журнала, а затем войдет "наконец". Но сначала консольный журнал кода 'наконец-то', а затем, после просмотра всего кода, вывод консольного журнала. Может ли кто-нибудь помочь мне позволить await работать на client.on()? Я просто надеюсь, что код может выполняться по порядку и ждать запроса асинхронизации.

async(ctx) => {
  const client = celery.createClient({
    CELERY_BROKER_URL: 'amqp://guest:guest@172.**.2.**:5672//',
    CELERY_RESULT_BACKEND: 'redis://172.**.2.**:6379/2',
    CELERY_ROUTES: {
      'street.add_account_multi': {'queue': 'street_default'},
    }
  });

  await client.on('connect', () => {

    client.call('street.add_account_multi', [crawlers], function (result) {
      console.log(result);
    });

  });

  console.log('finally');
}

1 ответ

Пожалуйста, постарайтесь поместить свою операцию после события 'connect' в обещание, а затем дождитесь разрешения.

let clientConnect = new Promise((resolve, reject) => {
  client.on('connect',() => {
    client.call('street.add_account_multi', [crawlers], function(result) {
      console.log(result);
      resolve(result);
    });
  })
});
await clientConnect;
console.log('finally');
Другие вопросы по тегам