【问题标题】:save result of an async function in a variable将异步函数的结果保存在变量中
【发布时间】:2023-03-06 13:13:01
【问题描述】:

我正在使用异步函数从 firebase 的集合中获取数据:`

let teste = async function getDados(db)
{
  const snapshot = await db.collection('place').doc('House').collection('user').get();
  snapshot.forEach((key) => {
  console.log(key.id, '=>', key.data());
});
return snapshot
}

console.log("test", teste)

但是,当显示变量时,结果是:

测试 [AsyncFunction: getDados]

如何将console.log中显示的结果保存在函数中的变量中?

谢谢! 最终代码:

async function getDados(db)
{
  const snapshot = await db.collection('place').doc('House').collection('user').get();
  let results = [];
  snapshot.forEach((key) => {
    results.push(key.id, key.data());
    console.log(key.id, '=>', key.data());  
  });
  return results
}

async function teste2()
{
let teste = await getDados(db);

console.log("test", teste);
}

teste2();

【问题讨论】:

  • 你没有调用这个函数——给teste()加上括号。其次,当你 do 调用它时,你会得到一个 Promise 对象。

标签: javascript firebase google-cloud-firestore


【解决方案1】:

您将函数getDados 存储在变量teste 中,那么如果您使用typeof teste,结果将是function。您可以使用teste(db) 调用函数getDados,但是如果您想将getDados 的返回值存储在变量teste 中,您可以使用以下代码:


async function getDados(db)
{
  const snapshot = await db.collection('place').doc('House').collection('user').get();

  snapshot.forEach((key) => {
    console.log(key.id, '=>', key.data());
  });
  return snapshot
}

let teste = await getDados(db);

console.log("test", teste);

如果您的项目在 v14.3.0 之前的版本上使用支持顶级等待的 Node,请记住在 async 函数中使用 await

【讨论】:

    【解决方案2】:

    你确实没有调用这个函数。您可以尝试类似,

    async function getDados(db)
    {
      let results = [];
      const snapshot = await db.collection('place').doc('House').collection('user').get();
      snapshot.forEach((key) => {
      results.push(key.id);
      console.log(key.id, '=>', key.data());
    });
    return results;
    }
    
    const teste = await getDados(db);
    console.log("results ", teste);
    

    我不确定您的代码中的key.data() 部分,所以我只是引用了key.id

    【讨论】:

    • 但是 async 函数返回一个承诺 - 这不会记录从 teste 内部返回的 snapshot
    • 谢谢!返回的结果:test Promise {} 你知道我如何从 Promise 中获取这些数据吗?
    • 试试console.log("results ",await teste());
    • 显示语法错误。 SyntaxError: missing ) 在参数列表之后。
    • 对,该函数正在等待至少一个 db 参数。我编辑了片段@FilipeDias
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2017-05-12
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多