gpt4 book ai didi

ember.js - 在 Ember Data 计算属性中 promise 结果

转载 作者:行者123 更新时间:2023-12-01 11:26:29 25 4
gpt4 key购买 nike

我正在尝试调用外部 API 并将结果用作我的 Ember 数据模型中的计算属性。结果被很好地获取,但是计算属性在 Promise 解析之前返回,导致未定义。这是观察者的用例吗?

export default DS.Model.extend({
lat: DS.attr(),
lng: DS.attr(),
address: Ember.computed('lat', 'lng', function() {
var url = `http://foo.com/json?param=${this.get('lat')},${this.get('lng')}`;
var addr;

var request = new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.ajax(url, {
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
});

request.then(function(response) {
addr = response.results[0].formatted_address;
}, function(error) {
console.log(error);
})

return addr;
})
});

最佳答案

使用DS.PromiseObject .我一直使用以下技术:

import DS from 'ember-data';

export default DS.Model.extend({

...

address: Ember.computed('lat', 'lng', function() {
var request = new Ember.RSVP.Promise(function(resolve, reject) {
...
});

return DS.PromiseObject.create({ promise: request });
}),

});

在您的模板中使用解析值作为 {{address.content}},它将在代理的 Promise 解析时自动更新。

如果您想在这里做更多事情,我建议您查看社区中的其他人在做什么:https://emberobserver.com/?query=promise

构建一个接受 DS.PromiseObject 的简单组件并不太难Promise 解决了。

我在我工作的应用程序中有一个 Ember.Service,它几乎完全由返回包含在 DS.PromiseObjects 中的 Promises 的计算属性组成。它运行起来非常顺畅。

关于ember.js - 在 Ember Data 计算属性中 promise 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36945858/

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