Почему этот код выдает неопределенную ошибку? облачная функция firebase - PullRequest
0 голосов
/ 05 августа 2020

У меня есть этот код для извлечения списка документов из коллекций firebase и его обработки в новый список.

Но он выдает сообщение об ошибке:

Ошибка: Update () требует либо один объект JavaScript или чередующийся список пар поле / значение, за которым может следовать необязательное предварительное условие. Значение аргумента «dataOrField» не является допустимым значением Firestore. Нельзя использовать «undefined» в качестве значения Firestore (находится в поле «myPick»). Если вы хотите игнорировать неопределенные значения, включите ignoreUndefinedProperties.

В чем, кажется, проблема?

ps - когда я тестирую «currentFoodPickList [0] .foodCondition» , это дало правильное значение. поэтому кажется, что что-то пошло не так при обработке 'finalFoodList'

ps2 - новое сообщение об ошибке после использования параметра ignoreUndefinedProperties:

Ошибка: Update () требует либо одного объекта JavaScript, либо альтернативный список пар поле / значение, за которым может следовать необязательное предварительное условие. Значение аргумента «dataOrField» не является допустимым значением Firestore. Значения "undefined" игнорируются только в свойствах объекта.

ps3 - Если бы кто-нибудь мог предложить какой-либо другой способ обработки 'currentFoodPickList' => 'finalFoodList', я был бы очень признателен.

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp();
admin.firestore().settings({ ignoreUndefinedProperties: true })


exports.onFoodDocumentUpdate = functions.firestore.document('foods/{foodID}')
.onUpdate(async (change, context) => {

    const foodDataAfter = change.after.data();
    const currentFoodID = context.params.foodID

    const currentFoodPickList = await admin.firestore().collection('foods').doc(currentFoodID).collection('foodPickRecord').get().then(function(docs) {
        let res = []
        docs.forEach(doc => res.push(doc.data()));
        return res;
    })


    const finalFoodList = [];

    for (var f in currentFoodPickList) {
        for (var i = 0; i < f.amount; i++) {
            finalFoodList.push(f.foodCondition)
        }
    }

    return admin.firestore().collection('foods').doc(currentfoodID).update({
        myPick: finalFoodList[0]
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...