Я пытался прочитать ответы на аналогичный вопрос, но не смог решить свою функцию.
Я создаю приложение для купонов, и сейчас я работаю над функцией повторного получения купонов. Я разработал это так, что раз в неделю функция просматривает список купонов, которые должны появиться снова, и создает аналогичный купон на неделю после. Предыдущий купон затем удаляется из списка.
В настоящее время я установил функцию на 2-минутные интервалы для проверки функции, и я продолжаю получать эту ошибку
Function returned undefined, expected Promise or value
За этим следует ошибка:
TypeError: Cannot read property '0' of undefined
но я не могу понять, почему.
Это моя функция:
exports.createRecurringDeals = functions.pubsub.schedule('every 2 minutes').timeZone('Asia/Jerusalem').onRun((context) => {
db.collection('recurring_deals').get().then(querySnapshot => {
querySnapshot.forEach(bus => {
const businessListDoc = bus.data();
if (businessListDoc !== undefined) {
return db.doc('businesses/' + bus.id).get().then(busDoc => {
const business = busDoc.data();
if (business !== undefined) {
businessListDoc.list.forEach((deal:string) => {
return db.doc('deals/' + deal).get().then(snapshot => {
const oldDeal = snapshot.data();
if (oldDeal !== undefined) {
const promises: any = [];
const startTime = oldDeal.startTime + oldDeal.interval;
const endTime = oldDeal.endTime + oldDeal.interval;
const newDealDoc = db.collection('deals').doc();
const newDeal = {
id: newDealDoc.id,
business_ID: business.id,
business_name: business.name,
business_address_text: business.address_text,
business_address_lat: business.address_lat,
business_address_long: business.address_long,
business_phone_number: business.phone_number,
business_image: business.restaurant_photos[0],
business_categories: business.categories,
business_sub_categories: business.sub_categories,
discount: oldDeal.discount,
timestamp_start: startTime,
timestamp_end: endTime,
gmt: oldDeal.gmt,
amount: oldDeal.amount,
claimers: [],
active: true
};
promises.push(newDealDoc.set(newDeal));
promises.push(db.doc('recurring_deals/' + business.id).update({ list: FieldValue.arrayRemove(oldDeal.id) }));
promises.push(db.doc('recurring_deals/' + business.id).update({ list: FieldValue.arrayUnion(newDeal.id) }));
return Promise.all(promises).catch(err => console.log(err));
} else {
return null;
};
}).catch(err => console.log(err));
});
return null;
} else {
return null;
};
}).catch(err => console.log(err));
} else {
return null;
};
});
return null;
}).catch(err => console.log(err));
});
Вот как мои данныеструктурирован:
Документы предприятий:
Документы сделок:
А потом это документы списков повторяющихся сделок. Обратите внимание, что эти документы имеют тот же идентификатор, что и компания, к которой они принадлежат:
Я продолжаю выполнять функцию, и все данные, кажется, находятся вправильное место, без орфографических ошибок, так почему он не работает?