角度组合Http获取响应与条件http post

时间:2017-09-21 10:07:25

标签: angular

我正在使用角度4的应用程序中实现私人消息系统。当用户点击其收件箱中的未读消息(可能构成一个也可能未读的线程中的多个消息之一)时,所有消息应该在线程中返回但我还想检查是否有任何消息未读,并将它们标记为读取作为此方法的一部分。

获取消息的调用如下所示:

Dim Resp As HttpResponse = HttpContext.Current.Response
Resp.Headers.Remove("X-Frame-Options")
Resp.AppendHeader("X-Frame-Options", "SAMEORIGIN")

并在组件中:

getMessageThread(id: number, recipientId: number) {
  return this.authHttp.get(this.baseUrl + 'users/' + id + '/messages/' + recipientId)
    .map(response => response.json())
    .catch(this.handleError);
}

我在服务中也有以下方法,如果线程中的任何返回消息被标记为未读,则应有条件地调用该方法:

loadMessageThread() {
    const currentUserId = +this.authService.decodedToken.nameid;
    this.userService.getMessageThread(currentUserId, this.userId).subscribe(messages => {
      this.messages = messages;
    }, error => {
      this.alertify.error(error);
  });
}

到目前为止,我尝试了几种不同的选择。如果我尝试从订阅中调用用户服务,则会收到错误消息,指出用户服务未定义:

markAsRead(userId: number, messageId: number) {
  return this.authHttp.post(this.baseUrl + 'users/' + userId + '/messages/' + messageId, {}).subscribe();
}

如果我在订阅之前尝试使用'do'方法,那么也无法在服务中调用该方法并直接进入错误条件而无需点击subscribe方法:

loadMessageThread() {
  const currentUserId = +this.authService.decodedToken.nameid;
  this.userService.getMessageThread(currentUserId, this.userId)
    .subscribe(messages => {
      this.messages = messages;
      _.each(this.messages, function(message) {
        if (message.read === false && message.recipientId === currentUserId) {
          console.log(message) // works
      this.userService.markAsRead(currentUserId, message.id); // fails
      }
    });
  }, error => {
    this.alertify.error(error);
  });
}

我不确定我是否过度思考这一点,并且错过了一个更明显的方法。任何帮助或建议将不胜感激。

谢谢,Neil

1 个答案:

答案 0 :(得分:1)

 _.each(this.messages, function (message) { 

应该是

 _.each(this.messages, (message) => {

否则this将不会引用该组件。