如何解决为什么此javascript / firebase函数返回诺言?
我今天在这个功能上一直不知所措。我要做的就是从Firebase中的集合中获取所有文档,并将其放在诸如fakeProjectMetaData之类的文档数组中。
这里也有类似的问题:
- How do I return the response from an asynchronous call?
- How to return value from an asynchronous callback function?
- Why does this simple JS promise return a promise?
但是当我通过自己的代码时,我只是不明白。我实际上已经尝试过许多不同的事情来对其进行编程并将其删除,因此在此处无法显示。因此,我将展示我拥有的东西以及什么会伤脑筋。
以下代码在服务文件中。我已经将该功能导入了另一个文件。我在React中尝试使用上下文API和Hooks。认为这是仅供参考,因为我认为与以下内容无关
import firebase from "../data/firebase/config";
const fdb = firebase.firestore();
const fakeProjectMetaData = [
{
projectID: 1234,projectName: "Testing 123",numberOfKeywords: 2109,scrapeFrequency: "Weekly",lastUpdate: "2 days ago",},{
projectID: 4567,projectName: "some other one",numberOfKeywords: 10245,scrapeFrequency: "Monthly",lastUpdate: "Last month",{
projectID: 7894,projectName: "Creative agency version 1",numberOfKeywords: 105,scrapeFrequency: "Daily",lastUpdate: "Yesterday",];
// fake data is just to show the datastructure. It's not used now.
export const getAllProjects = async () => {
const allProjectData = [];
await fdb
.collection("fakeProjects")
.get()
.then((snapshot) => {
snapshot.forEach((project) => {
allProjectData.push(project.data());
return;
});
})
.catch(function (error) {
console.log("Error getting documents: ",error);
});
return allProjectData;
};
(也许我不应该在这里使用异步等待吗?)在另一个文件中,我按如下方式调用该函数:
const projectData = getAllProjects();
现在我意识到这个projectData是(仍然吗?)一个我必须像这样处理的承诺:
projectData.then((project) => {
console.log(project);
});
至少输出我期望的数组。但是,将其更改为以下内容将不起作用。
const projectArray = projectData.then((project) => {
return project;
});
console.log(projectArray);
对于您的答案感到非常好奇,为什么这会导致诺言,我希望这个getAllProjects返回一个对象数组。我想念什么?如何从firestore将此结果作为数组使用?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。