Angular等待后端更新响应时要做什么?

时间:2015-09-14 23:56:59

标签: javascript angularjs

在教程中,他们有一个示例应用程序,用户可以在其中进行投票。当用户单击upvote时,它会发出更新后端的请求,并等待该请求成功,然后才会向用户显示该效果。代码如下:

$scope.incrementUpvotes = function(post) {
  posts.upvote(post);
};
o.upvote = function(post) {
  return $http.put('/posts/' + post.id + '/upvote.json')
    .success(function(data){
      post.upvotes += 1;
    });
};

这样做的缺点是,如果您的互联网速度较慢,可能会有延迟,这将是一个糟糕的用户体验。

我看到的两个选项是向用户显示加载符号,直到成功为止。在后台同步发生在后台时立即显示upvote的效果。这种情况的危险在于,如果请求失败,则客户端和服务器之间的数据将不同步。

我也看到有些人使用如下的ajax队列:

Add queueing to angulars $http service

编辑实际问题:

在开发和用户体验方面,最佳做法是什么?大多数人做了什么,是否有任何我应该注意的利弊?

1 个答案:

答案 0 :(得分:0)

在我的一些项目中,我已经做了这个以获得理想的快速用户体验。我已经使用了你的两个例子,但是如果我使用你的第二个例子,我会包含一个错误捕获来重新同步后端和前端,通知用户错误。例如:

o.upvote = function(post) {
    post.upvotes += 1;
    return $http.put('/posts/' + post.id + '/upvote.json')
        .success(function(data){
            // don't have to do anything here
        })
        .catch(function(err){
            post.upvotes -= 1;
            // inform the user of the error
        });
};

我的一般经验法则是,如果交互非常重要,则使用第一个选项,或者操作是进一步操作的先决条件。我将第二个选项用于用户期望快速无缝工作的独立事件。