我认为我在下面的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...
}
},
答案 0 :(得分:0)
对apiRequest
的调用不会阻止。如果您要等待承诺解决,则需要附加then
。在clickToTrigger
内:
this.apiRequest().then(function() {
todo = this.store… // et cetera
我对你的问题感到困惑,我不清楚你想在哪里等待承诺得到满足,但那是一般模式。