gpt4 book ai didi

ember.js - 如何根据 promise 返回数据

转载 作者:行者123 更新时间:2023-12-02 06:02:00 25 4
gpt4 key购买 nike

我在模型中有一个“虚拟属性”,我希望 setter 在返回值之前等待 promise :

idShop:Ember.computed('shop',function(){
get(key){
return this.get('shop').id;
},
set(k,v){
this.get('store').findRecord('shop',key)
.then(shop =>{
this.set('shop', shop)
})
}
})

在集合中,我需要在 findRecord 之后返回 k(key) 或 shop.id它是 then解决了。我怎样才能做到这一点?

最佳答案

所以这是 Ember Concurrency. 的一个很好的用例

Ember 并发 (EC) 使用生成器函数 function * () {}里面是task()方法使管理这样的事情变得更容易。任务还提供了一些实用程序属性来显示它当前是否为 running。或 idle (又名加载数据,或完成加载数据)。

这是我的设置方式(ember 2.17 及更高版本的代码)

import {task} from 'ember-concurrency';
import {computed} from '@ember/object';
# skip ahead to later in the code...
shop: null,
loadShop: task(function*(key) {
let shop = yield this.get('store').findRecord('shop', key)
this.set('shop', shop)
}),
shopId: computed('shop', function() {
if (this.get('shop') {
return this.get('shop.id);
} else {
return null;
}
})

根据您的具体用例,您可以调用 this.get('loadShop').perform(id)当您知道 id 是什么时(可能在 init Hook 或单独的方法中)

(注意:将属性作为计算属性的一部分进行变异是一种不好的做法。计算属性确实应该是无状态的。)

关于ember.js - 如何根据 promise 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51541497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com