Angular 7一次发送两个请求,一个发送数据,另一个不发送数据

时间:2019-03-26 14:59:10

标签: angular

我正在尝试使用ionic 4和angular 7构建一个混合移动应用程序,不幸地遇到一些错误,因为当我发出http post请求时,它将执行两次,第一个请求没有数据,而另一个请求有数据。我认为我的一些同事说的不是问题,而是根据我今天所学到的,问题是,一旦发送了请求,它就会尝试使用OPTIONS请求检查其安全性,然后再发送我们期望的请求立即发送可以有人帮助我避免该预检请求

sliced_img = tf.slice(img, [0, h_start, w_start], [-1, h_end - h_start, w_end-w_start]

1 个答案:

答案 0 :(得分:0)

不确定是否是引起您问题的原因,因为我看不到调用此功能的组件代码,但是您可能订阅了两次。订阅可观察对象(在本例中为http.post)时,将发送http请求。因此,订阅登录以及订阅帖子可能会导致重复请求

我将更改您的登录名,如下所示:

login().subscribe(data => {
    this.store.set('__authToken', data.__authToken).then(data => {
        // AUTH_TOKEN = token;
        resolve(data)
      },
      error => {
        reject(error);
      });
    }, error => {
      console.log(error);
})

然后无论您在哪里调用它,都要做类似的事情

login() {
        return this.http.post<Users>(base_url + 'login.json',{
          email: user.username, 
          password: user.password
        }).pipe(
            map(data => {
              this.store.set('__authToken', data.__authToken).then(data => {
                 // AUTH_TOKEN = token;
                 resolve(data)
              },
              error => {
                 reject(error);
              });
            })
            catchError(() => {}) // do something if error
        )
}

或者,如果您希望将存储逻辑包含在登录方法中,则可以利用Map并执行以下操作:

login().subscribe(res => { console.log(res) }, error => { console.log(error) })

当您调用它时,请执行以下操作:

{{1}}

Here is a nice short video to watch about a lot of the operators you can use with rxjs