Причина, по которой ваша функция возвращает объект, прежде чем вы извлекаете данные из облачного пожарного хранилища, заключается в том, что cfirebase.firestore().collection(...).doc(...)
является асинхронным и возвращает Promise
, поэтому вам нужно дождаться разрешения этого Promise
, прежде чем вы вернете окончательный вариант. объект.
Вам следует прочитать asynchronous programming
, если вы не знакомы с концепцией:
Я предлагаю вам изменить функцию homepage
, чтобы она возвращала Promise
, или использовать async/await
для ожидания разрешения cfire.get()
с некоторым значением, прежде чем return
конечный объект.
Опция # 1
function homepage(formData) {
const cfire = cfirebase.firestore().collection(...).doc(...)
return cfire.get()
.then(doc => {
if (!doc) {
throw new Error("Server error")
}
if (!doc.exists) {
throw new Error("Details does not exist")
}
// ...
return { Name, vehical, vehicalNumber }
})
.then(result => {
// result => { Name, vehical, vehicalNumber }
// ...
return {
tripId: {...}
}
})
}
// then
homepage(...)
.then(result => {...})
.catch(error => {...})
Опция # 2
Для использования async/await
необходимо иметь Node.js 8.x
или выше.
async function homepage(formData) {
try {
const cfire = cfirebase.firestore().collection(...).doc(...)
const doc = await cfire.get()
if (!doc) {
throw new Error("Server error")
}
if (!doc.exists) {
throw new Error("Details does not exist")
}
// ...
return {
tripID: {...}
}
} catch(error) {
throw error
}
}
// then
homepage(...)
.then(result => {...})
.catch(error => {...})
Подробнее о async/await
:
Надеюсь, что это помогает.