У меня есть облачная функция, которая в основном является триггером 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);
});
});