EmberFire:在保存记录完成时获取云函数生成的属性



我使用云函数在"onWrite"事件的记录上生成一个简短的唯一URL,并保存它。这很好用,但是当我使用 EmberFire 从我的 Ember 应用程序中保存记录时,我确实会得到一个模型作为回调的参数,但此模型的 URL 未定义。有没有办法将其返回给客户?还是需要查询记录才能获取生成的 URL?

这是我的云函数代码的外观:

exports.generateUrl = functions.database.ref('/tournaments/{tid}')
.onWrite(event => {
if (event.data.previous.exists()) {
return;
}
if (!event.data.exists()) {
return;
}
const url = shortid.generate();
return event.data.ref.update({ url });
});

这是我通过表单提交保存数据的组件。我正在使用一个名为 ember-changeset 的附加组件来处理一些验证,但这应该与问题无关。

export default Ember.Component.extend({
submit(e) {
e.preventDefault();
let snapshot = this.changeset.snapshot();
return this.changeset
.cast(Object.keys(this.get('schema')))
.validate()
.then(() => {
if (this.changeset.get('isValid')) {
return this.changeset
.save()
.then((result) => {
// Here, result.get('url') is undefined.
})
}
})
}
});

如果你有一个函数在写入后将新数据写回数据库中的某个位置,则必须继续侦听客户端上的该位置才能取回该数据。 不要使用一次性读取 (once()(,使用持久侦听器 (on()(,并在该侦听器中,确保您获取的是 URL 或您希望由函数生成的任何内容。 然后,如果您不再需要该侦听器,请将其删除。

(抱歉,我不知道 Ember 或它围绕实时数据库提供了哪些抽象 - 我为您提供了您在参考中使用的普通 JavaScript API 方法。

最新更新