EmberFire:保存记录完成后,获取Cloud Function生成的属性

时间:2017-07-02 12:11:17

标签: firebase ember.js google-cloud-functions emberfire

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

这是我的Cloud Function代码的外观:

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.
            })
        }
      })
  }
});

1 个答案:

答案 0 :(得分:0)

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

(对不起,我不知道Ember或它提供了什么样的实时数据库抽象 - 我给你提供了你在参考上使用的简单的JavaScript API方法。)