Дополнительные объяснения:
- Документ создается на iOS. Он содержит город и тип.
- В CloudFunctions я обнаруживаю создание / обновление документа с помощью триггера
onWrite. - Я хочу запросить другие документы FireStore для пользователей, соответствующих критериям типа City +. Затем я хочу отправлять им уведомления.
Вот мой код:
exports.NewRequestCreated = functions.firestore.document('/Requests/{documentId}').onWrite(event => {
// Get an object with the current document value
var myRequest = event.data.data();
// Get an object with the previous document value (for update or delete)
// Note that previous will be null if no old value exists.
if (event.data.previous) {
var oldDocument = event.data.previous.data();
}
//Get list of donors that can match this request
var compatibleTypesArray = getCompatibeUsers(myRequest.Type);
var matchingUsersArray = [];
var usersRef = functions.firestore.document('/Users');//functions.firestore.document('/Users');
var matchingUsersQuery = usersRef.where('city', '==', myRequest.city).where('type', '==', myRequest.type)
var user = matchingUsersQuery.get()
.then(snapshot => {
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
});
})
.catch(err => {
console.log('Error getting documents', err);
});
});
Но это не удается из-за следующей ошибки в консоли функций:
TypeError: usersRef.where не является функцией при экспорте. export.NewRequestCreated Created.functions.firestore.document.onWrite.event (/user_code/index.js:45:40) в объекте. (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:59:27) в следующий (собственный) в /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71 в __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12) в cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:53:36) в / var / tmp / worker / worker.js: 695: 26 в process._tickDomainCallback (internal / process / next_tick.js: 135: 7)
get()), должны возвращатьPromise. Это объясняется в документации. Поскольку вы будете добавлять код для отправки сообщений FCM, что также является асинхронной операцией, вам также необходимо ознакомиться с цепочкой обещаний. Видео в связанных документах полезно. - person Bob Snyder   schedule 01.12.2017