Ember helper returns promise 的解析值

Ember helper that returns the resolved value of a promise

我怎样才能得到 this helper 到 return 承诺的结果?

// 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

我会说,返回 Promise 而不是 helper 你可以尝试计算 属性。您可以创建依赖于 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}}

对于另一种方法,您可以

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

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

我使用一个组件得到了想要的结果,所以如果您发现自己处于这种情况,请考虑这一点。