У меня есть облачные функции, которые читают данные из базы данных Firestore. Я хочу получить все коллекции с данными в Unity C#.
Структура Firestore:
Users -> userid -> user's cars (test) ->
autoid -> name: example
autoid -> name: example2
autoid -> name: example3
Я использую эту облачную функцию: (nodejs 8)
const getDocument = admin.firestore().collection('Users').doc(context.auth.uid).collection('test').get();
return getDocument.then(snapshot => {
if (snapshot.empty) {
console.log('No matching documents.');
return;
} else {
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
//I think here need to add doc.id and doc.data() to array
return;
})
}
return;
//Here need to return array to unity.
}).catch(error => {
console.log(error)
return error;
})
Журнал консоли работает нормально:
* 6: 12: 48.214 PM info getCollectionsExample 18I01Ln9rM4sjIvb8FMs => {name: 'example3'}
6: 12: 48.215 PM info
getCollectionsExample 9YLfhX91pTulfj3muqPt => {name: 'example'}
6: 12: 48.215 PM info
getCollectionsExample QjG7vGdJCQ0lc0aeDNeg => {name: 'example2'} *
My: Unity C#
FirebaseFunctions.DefaultInstance.GetHttpsCallable("getCollectionsExample")
.CallAsync(data).ContinueWith((task) =>
{
if (task.IsFaulted)
{
// Handle the error...
print("ERROR");
foreach (var inner in task.Exception.InnerExceptions)
{
if (inner is FunctionsException)
{
var e = (FunctionsException)inner;
// Function error code, will be INTERNAL if the failure
// was not handled properly in the function call.
var code = e.ErrorCode;
print("Error code:" + code.ToString());
// var message = e.ErrorMessage;
}
}
}
else if (task.IsCompleted)
{
IDictionary snapshot = (IDictionary)task.Result.Data;
//Here I need doc1 name, doc2 name, etc..
}
Если я получаю только 1 коллекцию, то nodejs return {do c .data ()} и unity c#: snapshot ["name"] работает нормально. Но я не знаю, как получить несколько коллекций в Unity.
Я думаю, что нужно создать массив в облачных функциях nodejs, использовать return {array}, но я новичок в nodejs, и я не знаю, как перечислить этот массив в единстве C#.
Спасибо!
ОБНОВЛЕНИЕ:
Я меняю nodejs код:
var i=0;
let carslist = [{}];
const getDocument = admin.firestore().collection('Users').doc(context.auth.uid).collection('test').get();
return getDocument.then(snapshot => {
if (snapshot.empty) {
console.log('No matching documents.');
return;
} else {
snapshot.forEach(doc => {
carslist[i] = { ID: doc.id, name: doc.data().name };
i++;
return;
})
// console.log(carslist);
return { carslist };
}
}).catch(error => {
console.log(error)
return error; })
console.log показывает хороший список автомобилей, но я пишу это в Unity: System.Collections.Generi c .List`1 [System.Object] Что дальше? :)