Облачная функция запускается несколько раз - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть облачная функция, которая в основном является триггером onCreate().Он срабатывает всякий раз, когда в моем узле CustomerRequest создается заказ.Я использую эту функцию для проверки поставщиков онлайн на моей станции и назначаю первого, который я нашел, заказу.Все работает хорошо, но единственная проблема заключается в том, что после нескольких секунд срабатывания эта функция запускается еще 2 или 3 раза с идентификаторами ордеров, на которые я ранее размещал ордера.Полагаю, это что-то связано с обещаниями.Я новичок в JavaScript, поэтому понятия не имею, как он работает.

exports.processOrder = functions.database.ref('/CustomerRequests/{sid}/orders/{oid}')
.onCreate((snapshot, context) => {
    const stationID = context.params.sid;
    var oid = context.params.oid;
    var uid = snapshot.child('uid').val();
    //const Promises = [];
    var getInstanceIdPromise;
    var setSupPromise;
    var driveStatusPromise;
    var instanceID;
    //send notification 
    var product = snapshot.child("products").val();
    const payload = {
        data:{
           title: "You have got a new order",
           oid: oid
        }
    };

    var online = admin.database().ref('/STATION/'+stationID+'/SUPPLIERSONLINE')
        .on("value", function(snapshot) {
        console.log(snapshot.val());
        snapshot.forEach(element => {
            if(element.val() == "ONLINE"){
                //get instance of that supplier
                getInstanceIdPromise = admin.database().ref('/SUPPLIER/'+element.key+'/instid').on('value',function(snap){
                   instanceID = snap.val();
                   admin.messaging().sendToDevice(instanceID, payload)
                   .then(function (response) {
                       console.log("Successfully sent message:", response);
                   })
                   .catch(function (error) {
                       console.log("Error sending message:", error);
                   });

                }); 
                console.log("We are running");                 
                setSupPromise = admin.database().ref('/CustomerRequests/'+context.params.sid+'/orders/'+context.params.oid).child('supplier').set(element.key);
                //admin.database().ref('/SUPPLIER/'+element.key+'/orders').child(context.params.oid).set(true);
                driveStatusPromise = admin.database().ref('/SUPPLIERLOCATION/'+element.key+'/drivestatus').set(0);
            }
        });
       // return Promise.all([online,getInstanceIdPromise,setSupPromise,driveStatusPromise]);

    },function (errorObject) {
        console.log("The read failed: " + errorObject.code);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...