Итак, как уже упоминалось выше, я думаю, что ваша проблема основана на том, что вы не возвращаете результаты поиска в вашем документе, поэтому оба приведенных ниже примера справляются с этим.
Я также заметил, что вы использовали асинхронные теги в своих функциях, но никогда не использовали await, поэтому я хотел привести примеры обоих способов сделать это в случае, если вы хотите использовать Async / Await, но не был уверен, как.
В примере цепочки обещаний я полагаюсь на синтаксис функций стрелок для создания возвращаемых значений (без {}
означает возврат правой части уравнения), поскольку ни один из вашего кода не требует манипулирования данными перед возвратом (если ваш реальный код нуждается в этом, вы, конечно, должны использовать квадратные скобки и запомнить выражение возврата: D)
Если вы решите использовать Async / Await, вы можете структурировать код гораздо ближе к синхронным примерам и использовать операторы try catch,Иногда я нахожу этот синтаксис более ясным, если мне приходится много обрабатывать / манипулировать, прежде чем возвращать результат.
Удачи:)!
// Promise Chains
const addService = (req, res) =>
checkCategoryExists(param)
.then(result => /* do stuff */)
.catch(err => console.error(err.message));
const checkCategoryExists = param =>
db.collection(collectionName.doc(param)
.get()
.then(categoryDoc =>
Promise.resolve((categoryDoc.exists && categoryDoc.data().param === param))
);
// OR using Async/Await
const addService async (req, res) => {
try {
const catExists = await checkCategoryExists(param);
if (!catExists) {
throw new Error('error code');
}
// Do Stuff.
} catch (error) {
console.error(error);
}
};
const checkCategoryExists = async param => {
try {
const docs = await db.collection(collectionName)
.doc(param)
.get();
return (docs.exists && docs.data().param === param);
} catch (error) {
console.error(error)
}
}