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

标签 javascript ajax ember.js promise 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);
    });
  });
}

因此,当我调试该函数时,我发现该函数使用正确的数据进行解析(API 将所有请求的数据作为对象数组返回)。 然后我得到日志错误:

Error: Assertion Failed: The response from a findQuery must be an Array, not undefined

更新

问题已经解决了,但我还是不明白为什么会出现这种情况。

发生了什么?

我在存储注入(inject)器文件中设置

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

这为我解决了如下所示的 api 端点:

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

虽然在某种程度上存在一些冲突,但我尝试的是使用上面的函数解析一个如下所示的 url:

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

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

最佳答案

您需要返回一个 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/

相关文章:

javascript - 需要帮助来归纳curl Post代码中的JS/Node.js

Javascript 从关联数组中查找最小数字(冒泡排序方法)

javascript - 使用 cylon.js 的 Nest 恒温器

javascript - 如何找到拦截我的表单提交的内容?

ajax - 什么*确切*是 AJAX?

c# - ajax只发送输入的第一个值而不发送其他值?

javascript - Ajax 替换整个页面,而不仅仅是 div

ember.js - 在 Ember 项目中放置简单函数的位置

javascript - 如何获取通过 Node.js 上传到 Azure 存储的文件的 URL?

ember.js - Emberjs 1.x-pre- Ember.Router 和 Ember.compulated 问题