Есть ли способ получить значение обещания или наблюдаемого во внешней переменной? - PullRequest
0 голосов
/ 04 марта 2020

Я прочитал все о .then(), и я понимаю, как это работает, и это на самом деле работает в моей текущей реализации и дает мне значение, которое я ищу.

async getDay() {
    try {
      let ref = this.db.getDay(this.dateFirebase);
      ref.then(out => {
        out.get().then(inner => {
          console.log(inner.data());
        })
      })
    } catch (err) {
      console.log(err);
    }
  }

inner.data() дает мне точный объект, с которым мне нужно работать, но я не могу использовать его где-либо еще в компоненте, не могу назначить его никаким свойствам компонента и не могу получить его вне этой области.

То, что я сейчас пытаюсь сделать, это получить inner.data(), который является базовым c объектом, содержащим несколько полей, а затем отобразить его в шаблоне HTML и использовать его позже для различных других целей. Если я хочу получить объект изнутри, могу ли я сделать это только путем вызова .then() каждый раз или есть способ сохранить его в локальной переменной?

Если я сделаю что-то вроде:

out.get().then(inner => {
          console.log(inner.data());
          this.day = inner.data();
          console.log(this.day);
   })

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

Кажется, что неважно, что Да, значение внутри обещания нельзя использовать вне его, даже после того, как оно уже получено. Что я тут не так делаю?

1 Ответ

1 голос
/ 04 марта 2020

Используйте ожидание, чтобы вы могли дождаться разрешения каждого обещания.

function async getDay() {
    try {
      const out await this.db.getDay(this.dateFirebase);
      const inner = await out.get()
      return inner.data();
    } catch (err) {
      console.log(err);
    }
  }

, а затем вызвать его еще где:

getDay().then(day => this.day = day)
// or 
this.day = await this.getDay()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...