确保在带有promise的api请求中设置值

时间:2015-01-27 01:19:10

标签: ember.js

我认为我在下面的apiRequest函数中没有正确使用promises。如您所见,函数apiRequest由click按钮触发。我假设clickToTrigger函数将阻塞,直到apiRequest完成并且todos已设置,但是,我有时会收到错误消息,todos在运行的代码中未定义稍后在clickToTrigger函数中。是否有可能我错误地写了承诺。我应该如何编写apiRequest以确保clickToTrigger中的代码(未显示)在todos设置之前一直运行?

apiRequest: function(){
                        var that = this;
                        var datasource = 'http://example.com/api/todos';
                         return new Ember.$.ajax({url: datasource, dataType: "json", type: 'GET'}).then(function(data){  
                             that.set('todos', data);
                             }); 
                     },


 actions: {
     clickToTrigger: function(){
                         this.apiRequest();
                         todo = this.store.createRecord('index', {
                                          todos: this.get('todos'),                                                                           
                             });
                         todo.save();
                         //code moves on to do other things that need the todos but they are undefined...
                    }
    },

1 个答案:

答案 0 :(得分:0)

apiRequest的调用不会阻止。如果您要等待承诺解决,则需要附加then。在clickToTrigger内:

this.apiRequest().then(function() {
  todo = this.store… // et cetera

我对你的问题感到困惑,我不清楚你想在哪里等待承诺得到满足,但那是一般模式。