抛弃并忘记角度4 http发布请求

时间:2018-09-24 09:11:28

标签: angular http-post

我试图开火,忘记请求,但是我尝试的所有选项均无效。

该场景是在完成一个可订阅的请求之后,我将重定向到其他页面,但是在执行重定向之前,我应该再触发一个请求,而无需等待其响应。以下是我现在拥有的示例。

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);
}

所以我不想知道响应是什么,因此我没有subscribetoPromise()到第二个请求。但是,如果我不这样做,该请求将不会被触发。

但是如果我执行subscribe()toPromise(),由于重定向,我将收到 CORS失败错误。

现在,如果我删除了重定向,那么一切都会按预期进行。 在这种情况下,我该如何编写即发即忘方法?

PS -两个请求的Urls都发送到外部服务器。

编辑1

在这种情况下,window.location.href在获取CORS方面是否存在任何问题?

1 个答案:

答案 0 :(得分:1)

Angular中的http API返回一个可观察的对象,并且由于可观察的对象本质上是惰性的,因此除非您订阅它们,否则它不会做任何事情。

您可以简单地执行以下操作:

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

如果您不想订阅,我建议您为此使用简单的XMLHttpRequest:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send