【问题标题】:Push multiple objects at once一次推送多个对象
【发布时间】:2017-08-24 11:00:50
【问题描述】:

如何使用 angularfire2 一次执行多个对象推送?

仅仅推送一个对象数组并不会为每个对象设置键。

this.af.database.list('/symbols/').push({
  typ: "symbol1",
  // ....
});
this.af.database.list('/symbols/').push({
  typ: "symbol2",
  // ....
});

【问题讨论】:

    标签: javascript angular firebase firebase-realtime-database angularfire2


    【解决方案1】:

    使用常规 Firebase JavaScript SDK,您可以通过以下方式完成此操作:

    var updates = {};
    updates['/symbols/'+ref.push().key] = {
      typ :"symbol1", ....
    };
    updates['/symbols/'+ref.push().key] = {
      typ :"symbol2", ....
    };
    ref.update(updates);
    

    由于 AngularFire2 构建在普通 Firebase JavaScript SDK 之上,因此它们可以完美地互操作。因此,您可以只使用 Firebase JavaScript SDK 进行此操作。

    【讨论】:

    • 这对每个ref.push().key 进行服务器请求?
    • 不。 push 是一个客户端操作,它生成一个在统计上保证唯一的密钥。
    • “统计保证”?
    【解决方案2】:

    根据@Frank 的回答,即兴创作了一个reducer 和一个promise resolver> 这是最终版本:

    const admin = require('firebase-admin');
    const types = [
      {
        type: "symbol1"
      },
      {
        type: "symbol2"
      }
    ];
    const rootRef = admin.database().ref();
    const ref = rootRef.child(`/symbols`);
    
    // prepare updates object based on types array.
    let updates = types.reduce((update, type) => {
      let id = ref.push().key;
      update[`/symbols/${id}`] = type;
      return update;
    }, {});
    
    await rootRef.update(updates)
    .then((response) => {
      return res.status(201).json({message: "Records added successfully"});
    })
    .catch((error)=>{
      res.sendStatus(500);
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2023-03-23
      • 2014-06-07
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多