识别 Ember 中的 retrieve-record-object 的种类

Recognize the kind of retrieve-record-object in Ember

我正在构建一个 crud-route-mixin,我在其中定义路由的默认功能和操作。

其中一个函数将查询对象作为参数;在我执行调用的操作中:

_doSomething(query) {
    query.then( result => {
        //do something default with this result
    })
}

路由调用不同kind of methods_doSomething函数。例如:

路线A

export default Ember.Route.extend(CrudRoute, {
    setupController() {
        this._super(...arguments);
        this._doSomething(this.get('store').findAll('paper'));
    }      
}

路线B

export default Ember.Route.extend(CrudRoute, {
    setupController() {
        this._super(...arguments);
        this._doSomething(this.get('store').findRecord('blog-post'));
    }      
}

我想知道,是否可以检索查询对象的方法名称或类型?所以我可以做这样的事情(伪代码):

_doSomething(query) {
    query.then( result => {
        if (query.getRetrieveMethodName() === 'findAll') {
            //do something default with this array result
        } else if (query.getRetrieveMethodName() === 'findRecord') {
            //do something default with this single record result
        }
    })
}

P.S。检查有效载荷是单个记录还是数组不是一个选项,因为我也需要在错误处理中进行这种区分。

findRecordfindAllquery 返回的查询对象是 PromiseObjectPromiseArray(如果您使用 ember-data ).所以你可以像这样检查它的类型(即使出现错误):

import DS from 'ember-data';

_doSomething(query) {
    if (query instanceof DS.PromiseObject) {
       // single result
    }
    else if (query instanceof DS.PromiseArray) {
       // array 
    }
    else {
       throw new Error('Expected ember-data proxy object');
    }
    // Do something useful
 }

但是向控制器提供所需的数据不是更简单吗?

_doSomething(query, modelName, isArray) {
   query.then( result => {
      //do something default with this result
   });
}

export default Ember.Route.extend(CrudRoute, {
   setupController() {
      this._super(...arguments);
      this._doSomething(this.get('store').findRecord('blog-post'), 'blog-post', false);
   }      

}