Функция возврата Ember RSVP.Promise возвращена не определена

У меня есть функция в моем адаптере «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);
    });
  });
}

Поэтому, когда я отлаживаю функцию Ii, вижу, что функция попадает в решение с правильными данными (API возвратил все запрошенные данные в виде массива объектов). И затем я получаю журнал Ошибка:

Ошибка: утверждение не выполнено: ответ от findQuery должен быть массивом, а не неопределенным

ОБНОВИТЬ

Проблема решена, но я до сих пор не понимаю, почему это происходит.

что происходит?

Я установил файл store-injector

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

Это разрешит мне конечные точки api, которые выглядят так:

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

Хотя в некотором роде он имеет некоторый конфликт, я попытался разрешить URL-адрес с указанной выше функцией, которая выглядит так:

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

Он решил, но я не могу найти ссылки, почему это произошло, это имеет смысл, но все же я надеюсь, что кто-то может объяснить причину этого.

javascript,ajax,ember.js,promise,rsvp-promise,

1

Ответов: 1


0

Вам нужно вернуть 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
  });
}
JavaScript, Ajax, ember.js, обещание, RSVP-обещание,
Похожие вопросы