@Faraday_22

Промисы в js, что я делаю не так?

Доброго времени суток, помогите пожалуйста разобраться с промисами, допустим есть класс User в нем есть метод user() который должен возвращать данные о залогиненом пользователе .then возвращает данные как нужно, но как мне вызвать эти же данные из метода например let obj_user = new User();
obj_user.user();

class User{

    user(){
        var datauser;
        new Promise((resolve)=>{
            VK.Auth.login((response)=>{
                if( response.status === "connected"){
                    console.log('Пользователь авторизован')
                    datauser = response.session.user
                    resolve();
                }
            
            })
        }).then(result=>{
          console.log(datauser)
          return datauser
        })
        
    }
}

let obj_user = new User(); 
obj_user.user()
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
p00h
@p00h
Фехтовальщик-стропальщик
Промисы асинхронны, поэтому синхронный путь здесь неуместен.
Передайте в метод user коллбек, который выполнится при получении данных:
class User{

    user(clb){
        var datauser;
        new Promise((resolve)=>{
            VK.Auth.login((response)=>{
                if( response.status === "connected"){
                    console.log('Пользователь авторизован')
                    datauser = response.session.user
                    resolve();
                }
            
            })
        }).then(result=>{
          console.log(datauser)
          clb(datauser); // call it!
          return datauser
        })
        
    }
}
const clb = data => console.log('data has arrived'); // define it
let obj_user = new User(); 
obj_user.user(clb); // pass it
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Agranatmark
Верните промис из функции user. (для этого надо написать return перед new promise). В последней строке допишите then и делайте внутри него то, что вам понадобится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы