Использование async-await для выполнения задачи ПОСЛЕ удаления коллекции из базы данных mongodb - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь использовать async await для выполнения http-запроса перед выполнением какого-либо другого кода.
Точнее, я хотел бы удалить коллекцию в моей базе данных mongodb перед выполнением некоторых других задач.Вот что я сделал:

app.component.ts:

  async deleteRiskRatingData2() {
      await this.saveInformationService
      .deleteRiskRatingInformation()
      .subscribe((data: string) => {
        console.log('Deleting risk Rating');
        console.log(this.riskRatingTable);
      });
      console.log('TASKS TO BE EXECUTED AFTER DROPIING COLLECTION');
  }

save-information.service.ts

  deleteRiskRatingInformation() {
    console.log('INIDE deleteRiskRatingInformation INSIDE SAVE-INFORMATION.SERVICE');
    return this.http.get(`${this.uri}/dropRiskRatingCollection`);
  }

В бэкэнде:

server.js

router.route('/dropRiskRatingCollection').get((req, res) => {
    RiskRating.remove({},(err) => {
        if (err)
            console.log(err);
        else
            res.json("Risk Rating Collection has been dropped!");
    });
});

И вот что происходит:
enter image description here

Я полагаю, что моя реализация Async / Await должна позволить мне выполнить:

  console.log('TASKS TO BE EXECUTED AFTER DROPPING COLLECTION');

После того, как запрос на сброс был выполнен.Но этого не произошло, как вы видите.И я действительно не понимаю, почему.
Есть идеи, почему это происходит?Моя логика где-то ошибочна?И как мне достичь своей цели?
Спасибо!

1 Ответ

2 голосов
/ 29 июня 2019

async - await работают только с Обещаниями.Вы пробуете их с Observable с.Это не сработает.У Observable s есть API, который позволяет вам конвертировать их в Promise s.Вы можете вызвать метод toPromise для них, чтобы сделать это.

Попробуйте это:

async deleteRiskRatingData2() {
  const data = await this.saveInformationService.deleteRiskRatingInformation().toPromise();
  console.log('Deleting risk Rating');
  console.log(this.riskRatingTable);
  console.log('TASKS TO BE EXECUTED AFTER DROPIING COLLECTION');
}

ПРИМЕЧАНИЕ: Это нормально, если вы пытаетесь этопросто для того, чтобы проверить это.Но я думаю, что вам не следует возвращаться к обещаниям, просто используя async - await, чтобы ваш код выглядел синхронно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...