@Zenko

Как присвоить результат выполнения асинхронного метода переменной?

Есть класc Guest в нем есть ассинхронный защищенный метод _sendData2Srv, который передает данные на сервер и получает ответ.
class Guest {
  constructor() {
  }

  set email(email) {
      this._email = email.trim().toLowerCase()
  }
  get email() {
      return this._email
  }
   async _sendData2Srv(body, url) {
        let params = {
        method: "POST",
        mode: "same-origin",
        cache: "no-cache",
        credentials: "same-origin",
        headers: {
          "Content-Type": "application/json",
        },
        redirect: "follow",
        refferPolicy: "no-reffer"
        body: JSON.stringify(body)       
      }
    try {          
      const response = await fetch(url, params)
      return response.json()
    } catch (error) {
      console.error("Error was happend: ", error);
    }   
  }
}

Класс User наследует Guest и реализует публичный метод getDomains(), который использует в свою очередь, наследуемый _sendData2Srv

class User extends Guest {
  constructor(email) {
    super(email)
  }

  async getDomains() {
    return await this._sendData2Srv({domainName: this._domainName}, '/domain_list')
  }
}

При вызове получаю такой приходит Promise

const user = new User()
let responce = user.getDomains()
console.log(responce)

6154a5fcf08a0947032759.jpeg
В некоторых статьях говорится что асинхронность в классах может быть только если метод статический.
Как можно правильно решить данную задачу?
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
@lightseeker
ну во первых, конструкция return await совершенно бесполезна здесь
а во вторых вы должны либо ждать завершения Promise с помощью await, либо получить результат с помощью .then

//  если это async контекст
let response = await user.getDomains();


//  если это НЕ async контекст
user.getDomains()
   .then((data) => {
     let response = data;
   })
   .catch((err) => { // to do }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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