将ID从一个函数传递到另一个函数并返回



我想验证并设置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;   

}

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

lastCustIdGrab函数中,您需要返回promise链,如下所示:

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;
});
}

AND您应该注意,lastCustIdGrab函数是异步的,并返回Promise,这意味着您需要执行以下操作:

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

.get()是异步的,在您的方法中,您不会返回promise。因此,即使then()正在执行,promise解析返回的值也不会返回给lastCustIdGrab()调用,因为promise永远不会返回。所以(将其切换为使用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();

相关内容

  • 没有找到相关文章

最新更新