Firebase Firestore get()async / await

时间:2017-11-20 21:56:31

标签: typescript google-cloud-firestore

任何人都可以帮助我使用async / await

在Typescript中“翻译”这个例子
console.log("start") 
var citiesRef = db.collection('cities');
var allCities = citiesRef.get()
    .then(snapshot => {
        snapshot.forEach(doc => {
            console.log(doc.id, '=>', doc.data().name);
        });
        console.log("end")
    })
    .catch(err => {
        console.log('Error getting documents', err);
    });

我测试了一些代码,但我认为我对'forEach'循环做错了。

我想在控制台中找到的结果:

start
Key1 => city1
Key2 => city2
end

结果我参加了一些测试:

start
end
Key1 => city1
Key2 => city2

提前谢谢

2 个答案:

答案 0 :(得分:2)

在不知道类型的情况下,我根据它们的用法假定它们符合以下接口:

var db: {
    collection(name: 'cities'): {
        get(): Promise<Array<{
            id: string;
            data(): { name: string }
        }>>
    }
};

鉴于该声明,代码的async/await版本将是

async function foo() {
    console.log("start")
    var citiesRef = db.collection('cities');
    try {
        var allCitiesSnapShot = await citiesRef.get();
        allCitiesSnapShot.forEach(doc => {
            console.log(doc.id, '=>', doc.data().name);
        });
        console.log("end")
    }
    catch (err) {
        console.log('Error getting documents', err);
    }
}

答案 1 :(得分:0)

异步/等待

async function  allData_firestore(){ <---async
  var db = firebase.firestore();

var allCities = await  db.collection('cities').get(); //<----await

 for(const doc of allCities.docs){
console.log(doc.id, '=>', doc.data());
  }
 
 return allCities 

}

或者promise函数

function allData_firestore(){
     return db.collection('cities').doc('0gUdiWNEHiPMZStV9G').get().then(function (doc) {
            if (doc.exists) return doc.data();
            return Promise.reject("No such document");
        }

}