как вернуть несколько значений из асинхронной функции для использования в другой функции

#javascript #function #asynchronous #promise

#javascript #функция #асинхронный #обещание

Вопрос:

Я получаю значения логина и пароля в асинхронной функции и возвращаю их с помощью деструктурирования. Но когда я пытаюсь использовать данные в другой функции, она выдает — undefined. Помогите, пожалуйста. В чем проблема

 async function authWithLoginAndPassword() {
    const response = await fetch('');
    const data = await response.json();
    const logUser = data[0].login;
    const passwordUser = data[0].password;
    return { logUser, passwordUser }
}
submit.addEventListener('click', () => {
    let register = authWithLoginAndPassword();
    console.log(register.logUser, register.passwordUser)
})
  

Ответ №1:

Все async функции возвращают обещание, которое преобразуется в любое значение, полученное return из этой функции. Итак, при вызове authWithLoginAndPassword() вам нужно использовать либо .then() , либо await чтобы получить разрешенное значение из обещания, которое возвращает функция:

 submit.addEventListener('click', async () => {
    try {
        let register = await authWithLoginAndPassword();
        console.log(register.logUser, register.passwordUser)
     } catch(e) {
        // catch errors
        console.log(e);
     }
});
  

или

 submit.addEventListener('click', () => {
    authWithLoginAndPassword().then(register => {
        console.log(register.logUser, register.passwordUser)
    }).catch(err => {
        console.log(err);
    });
});