Использование асинхронного ожидания включено .затем выполните функцию с параметрами

#javascript #node.js

Вопрос:

Я провожу некоторое функциональное тестирование с мокко. Я сохранил имя своих функций, параметры и сообщение об успешном выполнении в локальном файле JSON. Я проверяю ответ своей базы данных с помощью локального ответа JSON. Я использую .тогда и … лови везде. Я ищу, чтобы очистить код с помощью асинхронного ожидания. Как я могу использовать асинхронное ожидание здесь?

 it('Check Authentication', (done) => {
    readFileData('checkAuth').then(({ params, message}) => {
      login.checkAuth({ ...params })
        .then((result) => {
          assert(result.message === message);
          done();
        })
        .catch((err) => done(err));
    });
}); 

Комментарии:

1. если вы не уверены, как преобразовать ваш пример, который очень тривиален, в async / await , вероятно, лучше всего пойти и немного почитать о синтаксисе async / await , и для вашего примера все будет ясно.

Ответ №1:

Что-то вроде этого. Я еще не проверял это. В принципе, вместо .then() тебя просто await звонок. Обратите внимание, что async перед (done) обратным вызовом есть. .catch() можно поймать с try/catch помощью блока.

 it('Check Authentication', async (done) => {
       let response = await readFileData('checkAuth');
       try {
         let message = await login.checkAuth({ ...response.params }); // or w/e the response is
         // assert the message
       } catch (e) {
          // do something with the error
       }
    });
 

Ответ №2:

  • Изменена функция обратного вызова на async использование » ожидание
  • Заключил все await вызовы в try-catch блок для обработки ошибок
  • Используется const для params message result переменных и , но если вы собираетесь переназначить значения позже в коде, вы можете использовать let вместо этого.
  • done() будет асинхронный вызов. Добавьте await перед этим, если вам это тоже нужно, чтобы синхронизировать вызов
 it('Check Authentication', async (done) => {
    try {
        const { params, message } = await readFileData('checkAuth');
        const result = await login.checkAuth({ ...params });
        assert(result.message === message);
        done();
    } catch (err) {
        done(err);
    }
});