在 Firebase Cloud Function 上组合两个阵列



我有两个节点,我需要在单个http调用上获得它们。我正在尝试通过使用 async/await 来获取两个节点,然后使用 concat 或 forEach 将它们组合起来来实现这一点。但似乎即使我正在等待响应,在函数内部它们仍然是承诺,而不是数据本身。这是我的基本示例:

exports.searchVisit = functions.https.onRequest(async (req, res) => {
const today = new Date(Date.now());
let todayVisits = await admin.database().ref('/visits/').once('value');
let frequentVisits = await admin.database().ref('/frequent_visits/').once('value');
console.log(todayVisits); // Prints an object (I guess it is a promise)
res.status(200).send(todayVisits); // Returns correctly the data on visits collection
});

我怎样才能将今天的访问和频繁访问结合起来?提前谢谢。

在代码中,todayVisits是一个 DataSnapshot 类型的对象。 这不是一个承诺。 记录该数据快照对象不太可能有用。 如果你想查看该快照中的原始数据,请对其调用 val(( 以获取包含该快照中整个数据集的 JavaScript 对象。 这也是您可能希望发送到客户端的内容(而不是数据快照的全部内容(。

下面的代码,合并用val()获得的两个 JavaScript 对象,正如 Doug 所解释的那样,应该可以解决问题:

exports.searchVisit = functions.https.onRequest(async (req, res) => {
const today = new Date(Date.now());
let todayVisits = admin.database().ref('/visits/').once('value');
let frequentVisits = admin.database().ref('/frequent_visits/').once('value');
const [todayVisitsSnap, frequentVisitsSnap] = await Promise.all([
todayVisits,
frequentVisits
]);
res.status(200).send({ ...todayVisitsSnap.val(), ...frequentVisitsSnap.val() }); 
});

最新更新