Огонь и забыть угловой 4 http пост-запрос - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь сделать запрос на запуск и забыть, но ни одна из опций, которые я пробовал, не работает.

Сценарий заключается в том, что после завершения одного подписываемого запроса я буду перенаправлять на какую-то другую страницу, но перед тем, как сделатьПеренаправление Я должен запустить еще один запрос, и мне не нужно ждать его ответа.Ниже приведен пример того, что у меня сейчас.

FormData.ts

sendData(){
   const ci = this;
   this.apiService.sendData(url, body, headers).subscribe(res => {
      ci.sendFireAndForget();
      window.location.href= this.tyredirect+".html";
   });    
}

sendFireAndForget(){
  //construct the body
  this.apiService.sendFireAndForget(url2, body);
}

APIService.ts

sendData(url, body, headers){
    return this._http.post(url, JSON.stringify(body), headers).map((res: Response) => res.json());
}

sendFireAndForget(emailUrl, body){
    let requestOptions = createHeader();
    this._http.post(emailUrl, body, requestOptions);
}

Так что я не хотел знать, каков ответ, и, следовательно, я не subscribe или toPromise() на второй запрос.Но если я этого не сделаю, запрос не будет выполнен.

Но если я сделаю subscribe() или toPromise(), я получу CORS не удалось ошибка из-за перенаправления.

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

PS - URL для обоих запросов на внешний сервер.

Редактировать 1

Есть ли проблема с window.location.href для получения CORS в этом сценарии?

1 Ответ

0 голосов
/ 24 сентября 2018

HTTP API в Angular возвращает наблюдаемое, и поскольку наблюдаемое лениво по своей природе, оно ничего не сделает, пока вы не подпишетесь на них.

Вы можете просто сделать это:

 ci.sendFireAndForget().subscribe(() =>  window.location.href= this.tyredirect+".html");

Если вы не хотите подписываться, я бы предложил вам использовать для этого простой XMLHttpRequest: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send

...