Я работаю с кодом node.js для интеграции с Cognito JS SDK. У меня есть проблема, связанная с асинхронными функциями, однако я не могу найти способ ее решить. Соответствующий код следующий.
cognitoUser.confirmRegistration(body.confirmation_code, true, function (err, result) {
if (err) {
// There is an error
console.log('User not confirmed: ')
console.log(err)
const response = {
statusCode: 422,
body: JSON.stringify(err)
};
return callback(null, response);
}
// All good
console.log('User confirmed: ')
console.log(result)
});
// if the user is not confirmed it should not get here
console.log('this is not working ==========');
verifyRegistration может иметь два результата. Если есть ошибка, должен быть вызван обратный вызов, и я ожидаю, что код завершится, а console.log внизу не будет выполнен. Однако этого не происходит. То, что происходит, - то, что verifyRegistration выполняется асинхронно (я полагаю), и, с тех пор код продолжает работать, внизу будет выполнен console.log и, в какой-то момент, verifyRegistration возвращает и ответит, и if (err) будет выполнен.
Однако это не то, что я хочу. Я ожидаю, что в случае ошибки console.log внизу никогда не будет выполнен.
Это выходные данные console.logs. Я выдвигаю ошибку, чтобы показать свое поведение.
this is not working ==========
User not confirmed:
{
code: 'CodeMismatchException',
name: 'CodeMismatchException',
message: 'Invalid verification code provided, please try again.'
}
Этот код выполняется на моем компьютере локально, однако он будет развернут в функции Lambda до AWS с использованием Serverless.