gpt4 book ai didi

javascript - 在 Ember 模型的计算属性中使用 Promise

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

我有一个模型,我们称之为任务,它有一个属性受让人。我有另一个模型管理员,那是一组管理员。在任务中,我想添加一个属性 admin,它通过电子邮件从管理员中查找受让人并返回该管理员。

Admin 上的主键不是电子邮件,在 Ember 模型中,看起来不可能在主键以外的任何键上创建 belongsTo 关联。我通过电子邮件而不是 ID 发送的原因是管理员并不总是存在。

任务模型看起来像这样:

import Em from 'ember';
import Admin from 'project/models/admin';
import PromiseObject from 'project/lib/promise-object';

var Task = Em.Model.extend({
id: Em.attr(),
name: Em.attr(),
assignee: Em.attr(),
admin: function() {
return PromiseObject.create({
promise: Admin.fetch({ email: this.get('assignee') })
}).then(function(json) {
return Admin.create(json);
}, function() {
return null;
});
}.property('assignee'),
adminName: Em.computed.oneWay('admin.name')
});

export default Task;

PromiseObject 只是扩展 PromiseProxyMixin,看起来像这样:

import Em from 'ember';
export default Em.ObjectProxy.extend(Em.PromiseProxyMixin);

当我尝试访问该属性时,我可以看到管理员的网络请求通过网络传输,并且我可以看到包含正确详细信息的成功响应。但是, promise 会返回 null

我希望在我的模板中包含 {{task.adminName}}。在这一点上,我对在我的模型中正确解决管理 promise 的最佳方式感到困惑。

最佳答案

您返回的不是 PromiseObject,而是一个链式 promise 。您应该只返回 PromiseObject

admin: function() {
var promise = $.getJSON("/admin").then(function(json) {
return Admin.create(json);
}, function() {
return null;
});

return PromiseObject.create({
promise: promise
});
}.property('assignee'),

示例:http://emberjs.jsbin.com/nobima/12/edit

将 Ember 模型 fetch 与对象一起使用会返回一个集合,而不是模型(当然除非您要获取的不是 Ember 模型)。所以 json 不是此时返回的内容。您可能想按照这些思路做些事情。

admin: function() {
var promise = Admin.fetch({ email: this.get('assignee') }).then(function(collection){
return collection.get('firstObject');
}, function() {
return null;
});

return PromiseObject.create({
promise: promise
});
}.property('assignee'),

关于javascript - 在 Ember 模型的计算属性中使用 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26792117/

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