我试图学习如何使用蓝鸟的承诺而我有点失落。
我有两个数据库表:topic
和subject
。
topic
表有一个subject_id
列,然后可以使用该列查询主题标题的subject
表。
我有一个orm
异步查询并返回一个承诺。
最终,我正在尝试为您执行查找的主题编写模型方法,将从后续subject_title
查询返回的subject
注入最初从最初返回的对象数组中的每个元素topic
查询。
我正在尝试使用Promise.map
,但这不起作用。下面的代码不起作用。我没想到它,但我认为它抓住了我想要完成的事情的本质。
var promise = orm.select({
db: db,
table: 'topic',
where: args.where,
order: args.order,
limit: args.limit,
offset: args.offset,
group: args.group
}).map(function (topic) {
var promise = orm.select({
db: db,
table: 'subject',
qrm: 'one',
where: {id: topic.subject_id}
}).then(function (subject) {
topic.subject_title = subject;
});
return promise;
});
return promise;
因此,假设一个vanilla topic
对象具有以下属性:
[subject_id, title, description]
subject
对象有:
[id, title]
我希望上面的函数返回一个具有以下属性的对象数组:
[subject_id, subject_title, title, description]
实现这一目标的最简洁方法是什么?
答案 0 :(得分:1)
您似乎只需要从topic
处理程序返回已修改的.then()
对象,以使其保持已满足的值:
return orm.select({
db: db,
table: 'topic',
where: args.where,
order: args.order,
limit: args.limit,
offset: args.offset,
group: args.group
}).map(function (topic) {
return orm.select({
db: db,
table: 'subject',
qrm: 'one',
where: {id: topic.subject_id}
}).then(function (subject) {
topic.subject_title = subject;
// Add return here so topic stays the fulfilled value
return topic;
});
});
顶级承诺的完全填充值应该是已修改主题对象的数组。