一旦承诺得到解决,如何延迟或仅设置计算属性?

时间:2015-12-31 01:10:09

标签: javascript ember.js promise

我有一个带有计算模型属性的Ember应用程序,我希望在模板中使用它。出于示例的目的,目前,我只是将其记录在模板中以测试输出:

{{log post.content}}

在模型中,计算属性" content"调用getMD(get markdown)函数:

var Post = DS.Model.extend({
  mdURL: DS.attr('string'),
  content: function() {
    getMD(this.get('mdURL')).then(function(md) {
      // On success
      return md;
    }, function(reason) {
      // On fail
    });
  }.property('content')
});

function getMD(url) {
  return new Promise(function(resolve, reject){
    var xhr = new XMLHttpRequest();

    xhr.open('GET', url);
    xhr.onreadystatechange = handler;
    xhr.responseType = 'text';
    xhr.setRequestHeader('Accept', 'application/text');
    xhr.send();

    function handler() {
      if (this.readyState === this.DONE) {
        if (this.status === 200) {
          resolve(this.response);
        } else {
          reject(new Error('getMD: `' + url + '` failed with status: [' + this.status + ']'));
        }
      }
    };
  });
}

承诺最终会返回数据,但这种情况发生得太晚了。模板中的计算属性已经是未定义的。

0 个答案:

没有答案