繁体   English   中英

Ember RSVP.Promise解析函数返回未定义

[英]Ember RSVP.Promise resolve function return undefined

我的适配器“ 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将所有请求的数据作为对象数组返回)。 然后我得到日志错误:

错误:断言失败:findQuery的响应必须是数组,而不是未定义

UPDATE

问题已解决,但我仍然不明白为什么会发生。

发生什么事?

我在商店注射器文件中设置

 inflector.irregular('general_device', 'devices');

对我来说,这可以解决如下所示的api端点:

https://api.url.net/account/85/devices

虽然以某种方式有一些冲突,但我尝试使用上述功能来解析网址,如下所示:

https://api.url.net/account/85/users/135/devices

解决了,但我找不到引用为什么会发生,这是有道理的,但我仍然希望有人能解释它发生的原因。

您需要返回一个PromiseArray。

请参阅有关如何使用它的示例的文档

在您的示例中,它将更改为:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM