#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);
}
});