Получите массив nodejs в Unity [Firebase cloud fun c. снимок] - PullRequest
0 голосов
/ 09 мая 2020

У меня есть облачные функции, которые читают данные из базы данных 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] Что дальше? :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...