2016-11-08 71 views
3

我是这个领域的新人。我看到互联网上有很多种方式,其中大部分都是关于旧版Firebase的,比如使用push()update(),save()。所以,我真的不知道如何更新它。我想,这样的:如何将数组更新为firebase?

function writeNewEvent(eObj) { 
      // A post entry. 
      var userObj = authObj.$getAuth(); 

      // Get a key for a new Post. 
      var newEventKey = ref.child('events').child(userObj.uid).push().key; 

      // Write the new post's data simultaneously in the posts list and the user's post list. 
      var updates = {}; 
      updates['/events/' + userObj.uid+ '/' + newEventKey] = userObj; 

      return ref.update(updates); 
     } 

但错误是:

angular.js:13920 Error: Firebase.update failed: First argument contains an invalid key ($d) in property 'events.LRnkjDgEu1QtuvUTazTwyms4U063.-KW56c87MThrK0PZp-XH.f'. Keys must be non-empty strings and can't contain ".", "#", "$", "/", "[", or "]" 

你能告诉我,如果我的方法是正确的?以及如何实现这个功能。

+0

*互联网上有很多种方法*是的,但Firebase文档中有一种方法。先尝试阅读。例如,'push'不会像你显然希望的那样返回一个包含'key'的对象。它返回一个** promise **,并且承诺的承诺值有一个可以使用的'key'字段。所有这些在文档中都有很好的解释。像往常一样,你只需要阅读它。 – 2017-04-02 13:46:23

回答

0

它看起来就像你有一个ID,所以你不需要使用推(),只需设置()的ID,如:

// assuming your input looks somthing like: 
let eObj = { 
    "uuid": "98765-8765-1234567890-7890", 
    "some-data": "stuff", 
    "other-data": "other stuff", 
    "numeric-data": 12345 
} 

function writeNewEventUsingObjUuid(eObj) { 
    // A post entry. 
    var userObj = authObj.$getAuth(); 

    return ref.child('events').child(userObj.uid).set(eObj).then(function() { 
    console.log('Event added with ID: ' + userObj.uid); 
    }).catch(function (e) { 
    console.log('Error adding event: ' + e.message); 
    }); 
} 

如果你真的想使用推(),火力会为您分配一个ID。请注意,像你一样的空push()会返回一个可接受的引用。虽然您预先获得ID,但仍然会完成异步事件。