Неопределенный тип в облаке - PullRequest
0 голосов
/ 21 марта 2019

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

пока это то, что у меня есть:

    exports.newRequest = functions.database.ref("/aRef/{aUID}/{bUID}").onCreate((snapshot, context) =>{
    var requestSnapshot = snapshot.data;
    console.log('Testing stuff',  context.params.aUID);
    var UID= context.params.aUID;
    var thisAmount= requestSnapshot.child('amount').val();
    var totalAmount= functions.database.child('aRef').child('bRef').child(UID).child('totalAmount').val();
    var finalAmount = totalAmount+ thisAmount;
    return functions.database().ref(`aRef/bRef/${UID}/totalAmount`).set(finalAmount);

});

и вот ошибка, которую я получаю:

TypeError: Cannot read property 'Id' of undefined
    at exports.newRequest.functions.database.ref.onWrite.context (/user_code/index.js:14:44)
    at cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:114:23)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:144:20)
    at /var/tmp/worker/worker.js:827:24
    at process._tickDomainCallback (internal/process/next_tick.js:135:7)

Я понимаю, что ошибка приводит меня к строке 14, которая в данном случае пытается получить значение {Id}, но не понимает, как ее исправить?

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Итак, после небольшого копания и опроса Дуга Стивенсона я неправильно звонил / пытался получить данные из контекста, а не из снимка, и пытался получить данные из другой области моей БД, не вставляя .once ( ) .then () для получения снимка. Мне также не нужен метод onWrite, но метод onCreate.

Финальный код ниже для всех, кому это нужно.

exports.onRequest = functions.database.ref("/Donations/{UID}").onCreate((snapshot, context) =>{
        var requestSnapshot = snapshot.val();
        var ID = snapshot.child('toid').val();    
        var thisAmount = snapshot.child('amount').val();
        var database = admin.database().ref(`/users/charity/${ID}/acc/totalAmount`);
        return database.once('value').then (snapshot =>{
        var totalAmount = snapshot.val();
        var finalAmount = totalAmount + thisAmount; 
         console.log('status',  snapshot.child('amount').val());
        return database.set(finalAmount); 

        });
        });
0 голосов
/ 21 марта 2019

Ваше определение функции далеко. Он должен принимать первый параметр, который является снимком, и второй параметр, который является контекстом. То, что у вас есть сейчас, выглядит так, будто оно пытается объединить оба объекта в один параметр с именем context.

Возможно, вы захотите вернуться к документации и узнать, как работают триггеры базы данных onWrite.

...