如何将Firestore查询中的数字保留在变量中以备将来使用?

时间:2019-01-05 15:23:20

标签: angular firebase google-cloud-firestore

我想将要从文档中查询的​​数字保留在firestore的集合中,并将该数字保存在有角度组件的局部变量中,以便在该组件的其他方法中使用。

我已经尝试实现Ittu提供的solution,但是这对我不起作用,因为我不知道在哪里使用Promise.all

这是我的代码:

var magNum: number;

docRef.ref.get().then(
  function(doc) {
  console.log("Document data:", doc.get('painPoint'));
  magNum = doc.get('painPoint');
});

console.log('number \n' + magNum);

在控制台中的结果为undefined,除非我将其放入如下函数中:

var magNum: number;

docRef.ref.get().then(
  function(doc) {
  console.log("Document data:", doc.get('painPoint'));
  magNum = doc.get('painPoint');
  console.log('number \n' + magNum);
});

然后在控制台中magNum为3

1 个答案:

答案 0 :(得分:2)

您必须学习有关回调函数和Promise的知识。

查看您的代码:

var magNum: number;

docRef.ref.get().then(
  function(doc) {
  console.log("Document data:", doc.get('painPoint'));
  magNum = doc.get('painPoint');
});

console.log('number \n' + magNum);

代码流如下所示:

  1. 您将变量magNum声明为数字
  2. 您说:“从firestore中获取文档,如果完成,则将painPoint号存储到magNum变量中”
  3. 从firestore中打印出我的magNum

但是真正发生的是这件事

  1. 代码将新变量magNum声明为数字
  2. 代码开始从Firestore ASYNC
  3. 获取您的文档
  4. 该代码会打印出您的magNum(未定义,因为尚未完成firestore文档的获取)
  5. 一段时间后,文档会被加载,您的变量magNum将被设置为painPoint的值。

安慰console.log('number \n' + magNum);将在magNum = doc.get('painPoint');行之前被调用,这就是{strong> console中magNumundefined的原因

您可以使用 async / await

async yourFunction(...){
    var magNum: number;

    var doc = await docRef.ref.get();
    magNum = doc.get('painPoint');

    console.log('number \n' + magNum); // output is the value of painPoint
}