异步 – 没有Ember Data的AJAX承诺

前端之家收集整理的这篇文章主要介绍了异步 – 没有Ember Data的AJAX承诺前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我决定不使用余烬数据,因为它不是准备就绪并且仍在变化。我的应用程序只需要做一些ajax请求,所以它不应该太大的区别。我无法理解如何处理ajax promise响应。

当我的用户加载应用程序时,他们已经有了验证的会话。我正在尝试ping该用户信息的服务器并将其显示在我的模板中。看来我的模板是在我的ajax请求返回结果之前呈现的,然后不会用承诺进行更新。

  1. // route
  2. App.ApplicationRoute = Ember.Route.extend({
  3. setupController: function(){
  4. this.set("currentUser",App.User.getCurrentUser());
  5. }
  6. });
  7.  
  8.  
  9. // model
  10. App.User = Ember.Object.extend({
  11. email_address: '',name_first: '',name_last: '',name_full: function() {
  12. return this.get('name_first') + ' ' + this.get('name_last');
  13. }.property('name_first','name_last')
  14. });
  15. App.User.reopenClass({
  16. getCurrentUser: function() {
  17. return $.ajax({
  18. url: "/api/get_current_user",type: "POST",data: JSON.stringify({})
  19. }).then(function(response) {
  20. return response;
  21. });
  22. }
  23. });

在我的模板中

  1. <h1> Hey,{{App.currentUser.name_first}}</h1>

在收到响应或延迟呈现之前,如何更新模板,直到我有回应?

其实答案很简单:你不需要使用承诺。而只是返回一个空对象。您的代码可能如下所示:
  1. App.User.reopenClass({
  2. getCurrentUser: function() {
  3. var user = App.User.create({}); //create an empty object
  4. $.ajax({
  5. url: "/api/get_current_user",data: JSON.stringify({})
  6. }).then(function(response) {
  7. user.setProperties(response); //fill the object with your JSON response
  8. });
  9. return user;
  10. }
  11. });

这里发生了什么?

>创建一个空对象。
>您对API进行异步调用
> …在你的成功回调你填补你的空对象。
>返回您的用户对象。

注意:真正发生了什么?上述流程不是这些操作发生的顺序。实际上,首先执行点1,2和点。然后一段时间后,当响应从您的服务器返回时,执行3。所以真正的行动流程是:1 – > 2 – > 4→> 3。

所以通常的规则是总是返回一个使Ember能够执行其逻辑的对象。您的案例中首先不会显示任何值,一旦您的对象被填充,Ember将启动它的魔法并自动更新您的模板。不需要努力工作在你身边!

超越最初的问题:用数组怎么做?
按照这个一般规则,你将返回一个空数组。这里有一个例子,假设你可能希望从你的后端获取所有用户

  1. App.User.reopenClass({
  2. getAllUsers: function() {
  3. var users = []; //create an empty array
  4. $.ajax({
  5. url: "/api/get_users",}).then(function(response) {
  6. response.forEach(function(user){
  7. var model = App.User.create(user);
  8. users.addObject(model); //fill your array step by step
  9. });
  10. });
  11. return users;
  12. }
  13. });

猜你在找的Ajax相关文章