копировать данные с одного дочернего узла node1 на другой дочерний узел node2 с помощью облачных функций Firebase - PullRequest
0 голосов
/ 07 июня 2018

enter image description here

Ниже приведен мой код облачных функций. Я пытаюсь скопировать данные из пользовательского узла для вызова узла

exports.copyChallengeDate = functions.database.ref(`Users/{pushId}/DateChallengeAccept`).onCreate((snapshot, context)=>{
  var DateChallengeAccept = snapshot.val();
  console.log('Challenge', context.params.pushId, DateChallengeAccept);
  var challenge = DateChallengeAccept;

  return admin.database().ref('Challenge/' + context.params.pushId).child('DateChallengeAccept').set(challenge);

});

Но дело в том,это когда я пытаюсь скопировать дату из пользовательской таблицы в узел вызова, это происходит только в QS5h99YxS0ZGpT42fpUFvzOdpTi1 DUID так же, как в узле Users.Я хочу скопировать его в оба uid (QS5h99YxS0ZGpT42fpUFvzOdpTi1, 7aH9Ag8414VzM0n7P6ur4LvcepI2) D, присутствующий в узле вызова.Я застрял в этом в последние два дня, пожалуйста, помогите мне

1 Ответ

0 голосов
/ 07 июня 2018

Обновление после того, как вы заметили, что DateChallengeAccept не инициализируется при создании записи .Вы должны использовать другой метод, например onUpdate() (или onWrite()), а не onCreate(), как вы делаете в своем вопросе.Выполните следующие действия:

exports.copyChallengeDate = functions.database.ref(`Users/{pushId}`).onUpdate((change, context) => 

    const DateChallengeAccept = change.after.val().DateChallengeAccept;

    if ( DateChallengeAccept === undefined) { 
       return false;
    }

    const referredBy = change.after.val().referredBy;

    console.log('Challenge', context.params.pushId, DateChallengeAccept);

    const dateChallengeAcceptObj = {
        "DateChallengeAccept": DateChallengeAccept
    };

    let updates = {};
    updates['Challenge/' + context.params.pushId + '/DateChallengeAccept'] = dateChallengeAcceptObj;
    updates['Challenge/' + referredBy + '/DateChallengeAccept'] = dateChallengeAcceptObj;

    return admin.database().ref().update(updates);


});

Вам необходимо получить значение referredId в своей функции, поскольку именно этот элемент данных содержит идентификатор другого пользователя (то есть 7aH9Ag8414VzM0n7P6ur4LvcepI2).Таким образом, вы должны инициировать событие на родительском узле, а не на узле DateChallengeAccept.

Затем вы должны использовать метод update() для одновременной записи в два узла, см. Документ здесь: https://firebase.google.com/docs/database/web/read-and-write#update_specific_fields

Итак, вы должны сделать следующее:

exports.copyChallengeDate = functions.database.ref(`Users/{pushId}`).onCreate((snapshot, context)=>{

    const DateChallengeAccept = snapshot.val().DateChallengeAccept;

    if ( DateChallengeAccept === undefined) { 
       return false;
    }

    const referredBy = snapshot.val().referredBy;

    console.log('Challenge', context.params.pushId, DateChallengeAccept);

    const dateChallengeAcceptObj = {
        "DateChallengeAccept": DateChallengeAccept
    };

    let updates = {};
    updates['Challenge/' + context.params.pushId + '/DateChallengeAccept'] = dateChallengeAcceptObj;
    updates['Challenge/' + referredBy + '/DateChallengeAccept'] = dateChallengeAcceptObj;

    return admin.database().ref().update(updates);


});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...