в Angular 8 запрос HttpClient внутри Promise завершается неудачно, и обещание никогда не разрешится - PullRequest
1 голос
/ 15 января 2020

Я использую пакет ng-select с Angular 8 для добавления тегов к сообщениям. Мне нужно создать новые теги по запросу пользователя. Вот пример документации:

addTagPromise(name) {
    return new Promise((resolve) => {
        this.loading = true;
        // Simulate backend call.
        setTimeout(() => {
            resolve({ id: 5, name: name, valid: true });
            this.loading = false;
        }, 1000);
    })
}

https://stackblitz.com/run?file=src / tags-backend-example.component. html

Этот код добавляет новый тег после одного второе и все работает. Но мне нужен настоящий запрос на стороне сервера. Проблема в том, что когда я добавляю запрос HttpClient, он ничего не выполняет вообще!

Например, в этом коде запрос 'get' никогда не будет выполнен, а Promise никогда не разрешится!:

addTagPromise(name) {
    return new Promise(resolve => {
      this.http.get("http://google.com").subscribe(); <--- Will never executed
      this.loading = true;
      // Simulate backend call.
      setTimeout(() => {
        resolve({ id: 5, name: name, valid: true }); <--- Never resolves
        this.loading = false;
      }, 1000);
    });
  }

https://stackblitz.com/edit/angular-wxb5r6?file=src%2Ftags-backend-example.component.ts

И мой окончательный код выглядит примерно так:

addTag(title: string) {
  const newLabel: CategorySet = { type: 'message', title };

  return new Promise((resolve, reject) => {
    this.categoryService.add(newLabel).subscribe(res => {
      if (res.code === 1) {
        // If added, get the list og gategories again
        this.getCategoryList();
        resolve();
      } else {
        this.toastr.error(res.message);
        reject();
      }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...