我的适配器“findQuery”中有一个函数,该函数需要从服务器获取数据并返回它。
功能:
findQuery: function(store, type, query) {
var userId = query['user_id'];
delete query['user_id'];
if (this.sortQueryParams) {
query = this.sortQueryParams(query);
}
var adapter = this;
// Create nested url
//return this.ajax(this.urlPrefix(this.pathForType(type.typeKey), this.buildURL(type, userId)), 'GET', { data: query });
// We would like to relate the rows to the connected user
return new Ember.RSVP.Promise(function(resolve, reject) {
adapter.ajax(adapter.buildURL(type.typeKey, null, userId), 'GET', { data: query }).then(function(devices) {
store.find('user', userId).then(function(user) {
devices.setEach('user_id', user);
resolve(devices); // devices is set exactly as i wanted!
}, function(failed) {
reject(failed);
});
}, function(error) {
reject(error);
});
});
}
因此,当我调试该函数时,我发现该函数使用正确的数据进行解析(API 将所有请求的数据作为对象数组返回)。 然后我得到日志错误:
Error: Assertion Failed: The response from a findQuery must be an Array, not undefined
更新
问题已经解决了,但我还是不明白为什么会出现这种情况。
发生了什么?
我在存储注入(inject)器文件中设置
inflector.irregular('general_device', 'devices');
这为我解决了如下所示的 api 端点:
虽然在某种程度上存在一些冲突,但我尝试的是使用上面的函数解析一个如下所示的 url:
它解决了,但我找不到它发生的原因,这是有道理的,但我仍然希望有人能解释它发生的原因。
最佳答案
您需要返回一个 PromiseArray。
请参阅documentation关于如何使用它的示例。
在您的示例中,它将更改为:
findQuery: function(store, type, query) {
var userId = query['user_id'];
delete query['user_id'];
if (this.sortQueryParams) {
query = this.sortQueryParams(query);
}
var adapter = this;
// Create nested url
//return this.ajax(this.urlPrefix(this.pathForType(type.typeKey), this.buildURL(type, userId)), 'GET', { data: query });
// We would like to relate the rows to the connected user
var promise = new Ember.RSVP.Promise(function(resolve, reject) {
adapter.ajax(adapter.buildURL(type.typeKey, null, userId), 'GET', { data: query }).then(function(devices) {
store.find('user', userId).then(function(user) {
devices.setEach('user_id', user);
resolve(devices); // devices is set exactly as i wanted!
}, function(failed) { reject(failed); });
}, function(error) { reject(error); });
});
return DS.PromiseArray.create({
promise: promise
});
}
关于javascript - Ember RSVP.Promise 解析函数返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732361/