首页 > 解决方案 > 在 firebase 函数上运行时我得到一个空数组,但在手机上的 react native expo 上运行时得到一个带有值的数组

问题描述

我在下面有这个代码,我作为 firebase 函数上传。每当我使用firebase functions:log检查日志时,我都可以看到 expoTokens 数组为空。

var expoTokens = [];

db.collection('members').get()
.then(docs => {

   var data = []

   docs.forEach(doc => {
      if (recipients.includes(doc.id)) {
         doc.data().expoTokens.forEach(token => {
            if (!data.includes(token)) data.push(token);
         })
      }
   })

   return Promise.all(data);
})
.then((data) => {
   expoTokens = data;
})

console.log("expoTokens");
console.log(expoTokens);

我只需要获取一个 ExpoTokens 数组,以便发送通知。

标签: javascriptfirebasereact-nativegoogle-cloud-firestoreexpo

解决方案


我建议使用它asyc/await来使代码流更加清晰。你的函数可以这样写:

var expoTokens = [];

const docs = await db.collection("members").get();

var data = [];

docs.forEach((doc) => {
  if (recipients.includes(doc.id)) {
    doc.data().expoTokens.forEach((token) => {
      if (!data.includes(token)) expoTokens.push(token);
    });
  }
});

console.log("expoTokens");
console.log(expoTokens);

// TO DO
// Send notifications using expoTokens using await

// We return to let the cloud function know that we are done
return;

只是不要忘记async你的功能async (snap, context) => {}


推荐阅读