PromiseProxyMixin
Ember 附带了一个内置的帮助程序,它将为异步任务的状态提供计算属性。
优点
- 内置 - 无需插件。
- 可以在组件的生命周期中进行管理。
- 提供可以驱动模板逻辑的方便的状态属性。
缺点
- 必须用
Ember.Object
包裹,不能直接应用于Ember.Component
。 - 在原始承诺链和
content
值的破坏之间创建断开连接。 - 不是非常直观,可能很难推理。
- 无法取消。
JavaScript
import Ember from 'ember';
const {
Component, PromiseProxyMixin, get, set, computed,
isPresent, run, RSVP: { Promise }
} = Ember;
const MyPromiseProxy = Ember.Object.extend(PromiseProxyMixin);
export default Component({
myProxy: computed('promise', {
get() {
const promise = get(this, 'promise');
return isPresent(promise) ? MyPromiseProxy.create({promise}) : null;
}
}),
actions: {
performTask() {
const fakeTask = new Promise((resolve) => {
run.later(resolve, 'Foobar', 2000);
});
set(this, 'promise', fakeTask);
}
}
});
模板
{{#if myProxy.isPending}}
Loading…
{{else}}
<button onclick={{action "performTask"}}>
Start Task
</button>
{{/if}}
{{#if myProxy.isFulfilled}}
Done. {{myProxy.content}}
{{/if}}
{{#if myProxy.isRejected}}
Something went wrong. {{myProxy.reason}}
{{/if}}