Ember助手返回promise的已解析值

时间:2017-05-25 16:32:04

标签: ember.js

如何让this helper返回承诺的结果?

// helpers/city-temperature.js

import Ember from 'ember';

export default Ember.Helper.extend({
  weather: Ember.inject.service(),
  compute(params) {
    let location = params[0];
    let temperaturePromise = this.get('weather').getTemperaturePromise(location);
    return temperaturePromise.then((value)=>{
      return value;
    });
  }
});

我在this discussion的代码之后对其进行了建模。它从远程API检索值,但我无法将其显示在组件中。我想在不传递DOM元素的情况下这样做。

完整的应用代码为here

2 个答案:

答案 0 :(得分:2)

根据来自embercommunity的专家,答案是helpers并非承诺意识,我们不应该使用它们来返回承诺的已解决价值。

我使用组件获得了所需的结果,因此如果您发现自己处于这种情况,则需要考虑这一点。

答案 1 :(得分:0)

我会说,返回Promise而不是帮助你可以尝试计算属性。您可以创建依赖于location的计算属性。请参阅此sample twiddle

import Ember from 'ember';
import DS from 'ember-data';
export default Ember.Controller.extend({
  appName: 'Ember Twiddle',  
  result:Ember.computed(function(){
    return DS.PromiseObject.create({
        promise: Ember.RSVP.resolve({name:'Kumkanillam'}).then((result) => { return result;})
         });
  })
});

在hbs内部,

{{#if result.isPending}}
  Loading...
{{else}}
  value: {{result.name}}
{{/if}}

对于另一种方法,您可以refer this answer

  • 通常的最佳做法是避免返回Promise的计算属性。