如何从angularfire消防商店获得多个随机文件



我一直在寻找解决方案,但没有为我的应用程序工作,我正试图使用angular和firestore与angular fire构建一个Quiz应用程序,我目前的方法是:

public getRandomQuestion(): Promise<any> {
let ques: IQuestion;
return this.firestore.collection('questions', ref => ref.where('randId', '>=', this.getRandomInt(1,999999)).limit(1)).valueChanges().toPromise();
}
public getTenRandomQuestion(): IQuestion[]{
let obs : IQuestion[] = [];
for (let i: number = 0; i <= 9; i++){
this.getRandomQuestion().then(res => {
obs[i] = res;
});
}
console.log(obs);
return obs;
}

但它总是返回一个空数组,这是我的火库:Firestore

如果添加一些日志记录或在调试器中运行代码,则可以很容易地看到return obs在调用obs[i] = res之前运行。

这就解释了为什么总是得到一个空数组,getTenRandomQuestion方法在从数据库加载任何数据之前就结束了。

解决方案是返回一个Promise,就像从getRandomQuestion返回一样。

public getTenRandomQuestion(): Promise<IQuestion>[]{
let obs : Promise<IQuestion>[] = [];
for (let i: number = 0; i <= 9; i++){
obs[i] = this.getRandomQuestion();
}
return obs;
}

然后,当您调用getTenRandomQuestion时,您可以添加then()子句,或者使用asyncawait

最新更新