правильное использование асинхронных и ждать в JS? - PullRequest
0 голосов
/ 04 февраля 2019
import Firebase from './Firebase'
import videoManager from './videoManage';

   async function getAllDatabaseLocations() {
        await let ref = Firebase.database().ref("locations")
        var user_locations = [];
        ref.on("value", function (snapshot) {
            snapshot.forEach(function (datas) {
                const data = datas.val();

                vid_manage = new videoManager(data.videourl);
                vid_ref = vid_manage.getLocationVideoUrl();
                vid_ref.getDownloadURL().then(function (url) {
                    videourl = url;
                   }).catch(function (error) {
                });
                let lokation = data.lokation;
                let videourl = data.videourl;
                let openinghours = data.openinghours;
                let links = data.links;

                let Lokationer = {
                    lokation: lokation,
                    videoUrl: videourl,
                    openingshours: openinghours,
                    links: links
                };

                console.log("Location objects are: ", Lokationer);
                user_locations.push(Lokationer);
                // location_obj.push(Lokationer);

            });                
        });
        return user_locations;
    }

export default getAllDatabaseLocations;

Этот метод всегда возвращает пустой массив, даже если консоль внутри цикла печатает, как я ожидал?Как использовать свойство async и await для возврата массива со всеми объектами Lokationer внутри него.

1 Ответ

0 голосов
/ 04 февраля 2019

Вам нужно будет вернуть новое обещание из-за асинхронного обратного вызова ref.on("value").

function getAllDatabaseLocations() {
  return new Promise(resolve => {
    ref.on("value", function (snapshot) {
      ...
      // when done filling the array
      resolve(user_locations);
    });
  });
}

const userLocations = await getAllDatabaseLocations(); // user_locations
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...