Ionic 2 MEAN 应用程序不会在获取请求时返回更新的数据

Posted

技术标签:

【中文标题】Ionic 2 MEAN 应用程序不会在获取请求时返回更新的数据【英文标题】:Ionic 2 MEAN Application doesn't return updated data on get request 【发布时间】:2017-07-23 07:38:51 【问题描述】:

我正在构建的应用程序遇到了这个奇怪的问题。本质上调用了一个函数,我想读取用户当前的游戏统计数据——赢、输、平局等——我使用一个服务来执行此操作,该服务创建一个 observable 并使用我的 rest api 中的数据。在第一次调用此方法时,读入的数据是最新版本,但在此之后,我为数据库中的用户更新文档,然后当我再次执行该函数时,它会在更新之前读入原始文档。但是,当我检查数据库时,文档已被更新。

这是我使用数据的提供程序函数。

  getUser(id) 
      if (this.data) 
          return Promise.resolve(this.data);
      
      return new Promise(resolve => 
          this.http.get('https://pitchlife-hearts.herokuapp.com/api/users/' + id)
              .map(res => res.json())
              .subscribe(data => 
                  this.data = data;
                  resolve(this.data);
              );
      );
  

这是我在函数中进行的调用。

play(challenger, opponent) 
       this.userService.getUser(_id).then((data) => 
                this.challenger_account = 
                    _id: data._id,
                    points: data.maroon_points,
                    wins: data.wins,
                    draws: data.draws,
                    losses: data.losses
                ;

这是我的更新电话。

    this.userService.updateUser(this.challenger_account);

这也是我的 api 端点调用,尽管每次更新数据时它都会起作用。

app.post('/api/users/update', function (req, res) 
    // Update a user
    var options = ;
    User.update(_id : req.body._id , 
        maroon_points: req.body.points,
        wins: req.body.wins,
        draws: req.body.draws,
        losses: req.body.losses
    , options,
        function (err, user) 
        if (err)
            res.send(err);
        res.json(user);
    );
);

非常感谢您对此的任何帮助,因为这让我发疯了。

【问题讨论】:

何时更新getUser(id) ... 方法使用的this.data 属性?因为第一次执行 getUser(id) ... 方法时,this.data 为空,因此发出了 http 请求。但是在那之后,this.data 的值总是会被​​返回,但是如果你不手动更新它,它总是会是第一个被设置的值。 谢谢你,传奇!我没有意识到是这种情况,但应该有,因为它很明显。你能把这个作为答案发布,这样我就可以相信你了:) 很高兴听到这个消息 :) 去过那里,这样做了哈哈,有时我们只需要让其他人查看代码即可找到这些东西... 【参考方案1】:

您何时更新getUser(id) ... 方法使用的this.data 属性?

因为第一次执行getUser(id) ... 方法时,this.data 为空,因此发出了http 请求。但在那之后,this.data 的值总是会被​​返回,但如果你不手动更新它,它总是会是它设置的第一个值。

【讨论】:

以上是关于Ionic 2 MEAN 应用程序不会在获取请求时返回更新的数据的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 2:单击背景时模态不会关闭

Ionic 2 - 从服务中获取数据

如何在控制器加载时立即显示 InAppBrowser 的实例,而 Ionic 应用程序不会无响应?

如何在 MEAN 应用程序中的同一 HTTP 请求中调用多个方法

ionic 3:在 android fcm.onNotification() 中,当应用程序处于后台时,点击通知时不会调用

角度不会向节点js rest API发出发布请求