#javascript #node.js #typescript #google-cloud-firestore #google-cloud-functions
#javascript #node.js #typescript #google-cloud-firestore #google-cloud-функции
Вопрос:
Я новичок в облачных функциях node.js и введите script. Я запускаю приведенный ниже код и получаю приведенную ниже ошибку и не могу разобраться в этом после просмотра тонны видеороликов об обещаниях и поиска других вопросов.
будем признательны за любую помощь.
Функция вернула неопределенное, ожидаемое обещание или значение
exports.compReqUpdated = functions.firestore
.document('/compRequests/{id}')
.onUpdate((change, contex)=>{
const newData = change.after.data();
//const oldData = change.before.data();
const dbConst = admin.firestore();
const reqStatus:string = newData.requestStatus;
const compId:string = newData.compID;
const reqActive:boolean = newData.requestActive;
if (reqStatus == "CANCELED" amp;amp; reqActive){
const query = dbConst.collection('compRequests').where('compID', '==', compId);
const batch = dbConst.batch();
query.get().then(querySnapshot => {
const docs = querySnapshot.docs;
for (const doc of docs) {
console.log(`Document found at path: ${doc.ref.path}`);
console.log(doc.id);
const docRef = dbConst.collection('compID').doc(doc.id);
batch.update(docRef, {requestStatus: 'CANCELED',requestActive: false});
};
return batch.commit()
})
.catch(result => {console.log(result)});
}else{
return
}
});
Ответ №1:
В документах firebase указано, что обратный вызов, переданный onUpdate
функции, должен возвращать значение PromiseLike
or any
, но вы ничего не возвращаете прямо сейчас. Если вы измените свой код на что-то вроде следующего, я считаю, что он должен работать так, как ожидалось:
exports.compReqUpdated = functions.firestore
.document('/compRequests/{id}')
.onUpdate((change, contex) => {
const newData = change.after.data();
//const oldData = change.before.data();
const dbConst = admin.firestore();
const reqStatus: string = newData.requestStatus;
const compId: string = newData.compID;
const reqActive: boolean = newData.requestActive;
if (reqStatus == "CANCELED" amp;amp; reqActive) {
const query = dbConst.collection('compRequests').where('compID', '==', compId);
const batch = dbConst.batch();
return query.get().then(querySnapshot => {
const docs = querySnapshot.docs;
for (const doc of docs) {
console.log(`Document found at path: ${doc.ref.path}`);
console.log(doc.id);
const docRef = dbConst.collection('compID').doc(doc.id);
batch.update(docRef, { requestStatus: 'CANCELED', requestActive: false });
};
return batch.commit()
}).catch(result => { console.log(result) });
} else {
return false;
}
});
Комментарии:
1. Спасибо. После просмотра вашего кода все, наконец, обретает смысл. 8 часов сна тоже могли бы помочь!