Причина, по которой вы получаете SellinglistComponent.html:53 ERROR Error: Function DocumentReference.set() called with invalid data. Unsupported field value: undefined (found in field ownerID)
, заключается в том, что вызываемая вами функция асинхронна.
К тому времени, как вы позвоните this.db.collection("bids").add({})
, this.db.collection('saleCrops').doc(this.bidObjectId).ref.get()
все еще не вернет ответ. Вот почему во второй раз, когда вы звоните, устанавливается this.ownerId
.
Вы можете проверить это, позвонив console.log(this.ownerId)
непосредственно перед this.db.collection("bids").add({})
Чтобы обеспечить решение, Вы должны сделать функцию асинхронной.
async addBid(bidObj)
Затем вы можете вызвать следующее с ожиданием.
await this.db.collection('saleCrops').doc(this.bidObjectId).ref.get()
Поскольку два блока кодов выглядят зависимыми друг от друга. Вы можете сделать следующее.
Вместо настройки this.ownerID = doc.data().posterID;
Вы можете вернуть это значение следующим образом.
await this.db.collection('saleCrops').doc(this.bidObjectId).ref.get()
.then((doc) => {
if (doc.exists) {
return doc.data().posterID;
}
}).then(id => {
this.db.collection("bids").add({})
}).catch(error => console.error(error));