2017-07-02 34 views
0

我使用云端函数在'onWrite'事件的记录上生成一个简短的唯一URL并保存。这很好,但是当我使用EmberFire从我的Ember应用中保存一条记录时,我确实将模型作为回调的参数返回,但是此模型的URL未定义。有没有办法将这个返回给客户端?或者我需要查询记录以获取生成的URL?EmberFire:在保存记录完成时获取由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. 
      }) 
     } 
     }) 
    } 
}); 

回答

0

如果您有在写后的数据库的位置写入新的数据备份功能,你必须不断地为获得这些数据回听客户上该位置。不要使用一次性读取(once()),使用持久性侦听器(on()),并且在该侦听器中,确保获取URL或您希望由该函数生成的任何内容。如果你不再需要它,那么删除那个监听器。

(对不起,我不知道Ember或它在Realtime Database中提供了什么抽象概念 - 我给你提供了在参考上使用的普通JavaScript API方法。)