I understand that Firestore doesn’t support logical OR for queries. My idea is to create multiple queries and merge the results at the client. I am developing a news app and I am trying to fetch all articles that contain my users’ interests tags (ex. technology, music etc) An average user has 20 tags so I will be making 20 different requests.
Does anyone has experience with chaining multiple requests and returning a unique promise when all results arrive.?
I am using the js sdk
My data structure:
articles (collection)
-article (document)
--id: 10
--time: 1502144665
--title: "test title"
--text: "test text"
--tags(obj)
---technology: 1502144665,
---politics: 1502144665,
---sports: 1502144665
So I will need to create multiple db requests like the following.
user.tags = ["technology","politics","sports","architecture","business"];
for (var i = 0; i < user.tags.length; i++) {
db.collection('articles').where(user.tags[i], '>', 0).orderBy(user.tags[i]))
.get()
.then(() => {
// ... push to article array
});)
}
I am trying to figure out how to create a promise / callback when every request finishes.
You can save each of the database access Promises in an array, then use Promise.all() to get a Promise that resolves when each of the database accesses is complete. (This code is not tested, it may contain some syntax errors, but it demonstrates the idea.)
user.tags = ["technology","politics","sports","architecture","business"];
var dbPromises = [];
for (var i = 0; i < user.tags.length; i++) {
dbPromises.push(
db.collection('articles')
.where(user.tags[i], '>', 0)
.orderBy(user.tags[i])
.get()
);
}
Promise.all(dbPromises)
.then(() => {
// ... push to article array
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With