2015-09-14 72 views
0

在教程中,他们有一个示例应用程序,用户可以在其中调用事情。当用户点击upvote时,它会发出更新后端的请求,并在它向用户显示效果之前等待,直到该请求成功。代码如下:Angular等待响应后端更新时应该做些什么?

$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

编辑:

什么是最好的做法在这里的发展和用户方面经验?大多数人做什么,有没有我应该注意的优点/缺点?

+0

看着乐观的更新 – walkerrandophsmith

+0

我不会说这是角度特定的,你会有任何Ajax驱动的Web应用程序的这个问题。 [等待AJAX​​请求时的标准做法是什么](http://ux.stackexchange.com/questions/52319/what-is-the-standard-practice-for-while-waiting-for-a-ajax - 请求)可能会有所帮助。 – user2718281

回答

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

我的一般经验法则是使用第一个选项,如果互动是非常重要的,还是行动再行动的先决条件。我使用第二个选项来进行独立事件,用户期望快速无缝地工作。

相关问题