Заставьте http-запрос ждать ответа - PullRequest
0 голосов
/ 03 мая 2019

У меня есть запрос HTTP GET, который возвращает разрешение. Я использую этот запрос в моем auth.service.ts в isProjectLead (). Мне нужно подождать, пока запрос http вернет значение, чтобы разрешить доступ к странице.

Как я могу это сделать? Я пытался использовать Обещания, но я мало что знаю об этом.

get isProjectLead() {

  var flag = false;
  //var thisPromiseCount = ++this.promiseCount;

  var user = JSON.parse(localStorage.getItem("user"));
  if (!this.selectedProject) {
    this.selectedProject = parseInt(this.route.snapshot.paramMap.get('id'));
  }

  this.linkService.getLinksByUserAndProject(user.username, this.selectedProject).subscribe(links => {
        this.links = links;

        this.links.forEach(element => {
          if (JSON.parse(element).role.id == "2") {
            flag = true;
          }
        });
      },
        (err: any) => {
        });


  return flag;
}

1 Ответ

0 голосов
/ 03 мая 2019

Преобразование наблюдаемого в обещания

async isProjectLead() {

  var flag = false;
  //var thisPromiseCount = ++this.promiseCount;

  var user = JSON.parse(localStorage.getItem("user"));
  if (!this.selectedProject) {
    this.selectedProject = parseInt(this.route.snapshot.paramMap.get('id'));
  }

  try {
    var links = await this.linkService
      .getLinksByUserAndProject(user.username, this.selectedProject)
      .toPromise();
    this.links = links;

    this.links.forEach(element => {
      if (JSON.parse(element).role.id == "2") {
        flag = true;
      }
    });

  } catch (e) {
    // handle error
  }

  return flag;
}

Точка для запоминания

Обратный ответ также будет обещанием, поэтому вам придется подождать, пока обещание не будет выполнено.

...