favouriteData не повторяется в export.favoriteTrigger.functions.firestore.document.onCreate в cloudFunction - PullRequest
1 голос
/ 15 октября 2019

У меня есть две коллекции. один - jobs, а другой - users.

Пользователь может выбрать любимую категорию Name. Я храню в User коллекции ... Внутри job Я храню все категории с помощью categoryName.

При вставке нового задания в job и в этом задании categoryName == user selected categoryName Я инициировал push-уведомление на устройстве.

Просто чтобы знать: я храню маркер устройства tokens collection.

Сообщение об ошибке, поступающее на Function log при вставке newjob '

TypeError: favouriteDataне может быть повторен в export.favoriteTrigger.functions.firestore.document.onCreate (/srv/index.js:57:25) в cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:131:23) в /worker/worker.js:825:24 в at process._tickDomainCallback (внутренний / process / next_tick.js: 229: 7)

exports.favoriteTrigger = functions.firestore.document('jobs/{any}')
.onCreate((snapshot,context)=>{
    var categoryName = [];
    var equalCategory = [];
    if(snapshot.empty){
        console.log('No Jobs in Jobs Collection');
        return null;
    }else{
        favoriteData = snapshot.data();
        for(var jobC of favoriteData){ //57:25 line code. error is coming here
            categoryName.push(jobC.data().categoryName);
        }
    admin.firestore().collection('users').get().then((snapshot)=>{
        var userCategory = [];
        if(snapshot.empty){
            console.log('User not select favorite category yet');
            return null;
        }else{
            for(var jobCategory of snapshot.docs){
                userCategory.push(jobCategory.data().jobCategory);
            }
            var i;
            var j;
            for(i = 0; i < userCategory.length; i++){
                for(j = 0; j < categoryName.length; j++){
                    if(userCategory[i] === categoryName[j]){
                        return equalCategory.push(userCategory[i]);
                    }
                }
            }
            return null;
        }
    }).catch((error)=>{
        console.log('Error last ' + error);
    });
        admin.firestore().collection('tokens').get().then((snapshot)=>{
            var tokens = [];
            if(snapshot.empty){
                console.log('No devices');
                return null;
            }else{
                for(var token of snapshot.docs){
                    tokens.push(token.data().tokenId);
                }

                var payload = {
                    "notification":{
                        "title":"You have new job ",
                        "body":"Offer",
                        "sound":"default"
                    },
                    "data":{
                        "sendername":msgData.applyJobDate,
                        "message":msgData.jobId
                    }
                };
                if(equalCategory.length !== 0){
                    return admin.messaging().sendToDevice(tokens,payload).then((response)=>{
                        console.log('pushed them all');
                        return null;
                    }).catch((error)=> {
                        console.log(error);
                        return null;
                    })
                }
            }
            return null;
        }).catch((error)=>{
            console.log(error);
            return null;
        })
}
});

1 Ответ

4 голосов
/ 15 октября 2019

DocumentSnapshot .data() возвращает объект, который нельзя перебрать с помощью for...of. В зависимости от того, что вы пытаетесь сделать, вы можете использовать:

  • for...in
  • Object.keys()
  • Object.values()

на возвращаемом объекте

...