java—通过返回将id从一个函数传递到另一个函数

xpszyzbs  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(351)

我想验证并设置firebase中集合的id。现在我正试图从集合查询中获取一个id号,并将其发送给需要它的函数。下面是需要id#的函数。

const data = lastCustIdGrab(); console.log(`Last number ${data}`);

这是寄信人。我可以在控制台日志中获取文档id,但不知道如何将其发回。

exports.lastCustIdGrab = () => {
  db.collection('Customers')
  .orderBy('createdAt', 'desc')
  .limit(1);
  .get()
    .then((data) => {
        let DOC = data.docs[0];
        let ID = DOC.id;
        console.log("LOOOP ",ID);
   return ID;
})}

这会在looop输出中获取id,但不会返回它!我知道我可以返回数据,因为我已经用下面的任意代码进行了测试,它可以正常工作。返回将其发送回控制台,以便正确地记录在“最后一个数字”输出中。

exports.lastCustIdGrab = () => {
let ID = 12345;
return ID;

}
所以我确信我只是错过了一些简单的东西。谢谢你的帮助!

j5fpnvbx

j5fpnvbx1#

lastCustIdGrab 函数返回承诺链,如下所示:

exports.lastCustIdGrab = () => {
  return db.collection('Customers')   // <== See return 
  .orderBy('createdAt', 'desc')
  .limit(1);
  .get()
    .then((data) => {
        let DOC = data.docs[0];
        let ID = DOC.id;
        console.log("LOOOP ",ID);
        return ID;
    });
}

你应该注意到 lastCustIdGrab 函数是异步的,并返回一个承诺,这意味着您需要执行以下操作:

lastCustIdGrab()
.then(data => {
   console.log(`Last number ${data}`);
});
xxe27gdn

xxe27gdn2#

.get() 是异步的,在您的方法中,您不会返回承诺。所以即使 then() 正在执行时,从承诺的解析返回的值不会返回给 lastCustIdGrab() 调用,因为承诺永远不会返回。因此(将其切换为使用async/await)尝试以下方法:

exports.lastCustIdGrab = async () => {
  let data = await db.collection('Customers')
  .orderBy('createdAt', 'desc')
  .limit(1)
  .get();

  let DOC = data.docs[0];
  let ID = DOC.id;
  return ID;
  }
}

在调用过程中,等待承诺得到解决,以确保错误处理和方法完成:

const data = await lastCustIdGrab();

相关问题