Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS,Firestore获得字段_Javascript_Node.js_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript NodeJS,Firestore获得字段

Javascript NodeJS,Firestore获得字段,javascript,node.js,firebase,google-cloud-firestore,Javascript,Node.js,Firebase,Google Cloud Firestore,我已经在我的nodejs聊天机器人上设置了firestore。 并成功将Facebook用户ID复制到.doc Name, 并在firestore中的用户ID下设置用户名和其他信息 如何检索此“字段”名称 显示回用户 到目前为止,我得到的是这个 const givename=db.collection('users').doc(''+发送方id).get(“name”); 还没有使用Firestore,但是通过阅读 以下类似的方法应该可以工作(未经测试): 调用get()不会立即返回数据,因为

我已经在我的nodejs聊天机器人上设置了firestore。 并成功将Facebook用户ID复制到.doc Name, 并在firestore中的用户ID下设置用户名和其他信息

如何检索此“字段”名称 显示回用户

到目前为止,我得到的是这个

const givename=db.collection('users').doc(''+发送方id).get(“name”);

还没有使用Firestore,但是通过阅读

以下类似的方法应该可以工作(未经测试):

调用
get()
不会立即返回数据,因为数据是异步加载的。而是返回一个promise,该promise在加载数据后解析。这意味着您可以使用
await
(如Francisco的回答)或(如果
await
不可用)实现
then()
方法:

db.collection('users').doc(''+ sender_id).get().then(function(doc) {
  console.log(doc.data().name);
});

需要注意的一个常见陷阱是:
doc.data()
仅在回调中可用,

不幸的是,这似乎无法解决问题。获取一堆userDoc.data不是函数userDoc.data不是函数谢谢你的评论。还是有点困惑。我得到了NaN的回应。firebase日志中没有显示任何名称。这很奇怪。这意味着什么?编辑。把它擦掉。它是。无论如何。它现在在日志中撬动它,但不允许const givename=“code here”工作。或者这是不可能的?我不知道最后一点是什么意思。但正如我在回答中所说的那样:
doc.data()
中的数据只在
then()
回调中可用。有关这种编程方式的更多信息,请参见,这在现代JavaScript中非常常见。啊,如果我希望我的代码触发名称,那么它需要在then()中,这样我就可以在需要时使用常量来调用该函数。。真糟糕。我现在就解决这个问题,看看能否找到解决办法:)
wait
是ES2017(iirc)中引入的一个关键词。它在节点8和更高版本中可用。如果您想尝试使用它,我建议您在“using await in node.js”上进行一些搜索,因为它们可能会找到比我可以快速分享的更好的解释。
db.collection('users').doc(''+ sender_id).get().then(function(doc) {
  console.log(doc.data().name);
});