Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript I';我在firebase函数上运行时得到一个空数组,但在手机上运行时得到一个带值的数组_Javascript_Firebase_React Native_Google Cloud Firestore_Expo - Fatal编程技术网

Javascript I';我在firebase函数上运行时得到一个空数组,但在手机上运行时得到一个带值的数组

Javascript I';我在firebase函数上运行时得到一个空数组,但在手机上运行时得到一个带值的数组,javascript,firebase,react-native,google-cloud-firestore,expo,Javascript,Firebase,React Native,Google Cloud Firestore,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.

下面是我作为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,以便发送通知。

您的
console.log(ExpoTokens)发生在
expotokes=数据之前曾经运行过

见:

如果您想从云功能中返回世博代币,请从内部
返回,然后从主功能中向上返回

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

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

var expotkens=[];
const docs=await db.collection(“members”).get();
var数据=[];
docs.forEach((doc)=>{
if(收件人包括(文档id)){
doc.data().expotokes.forEach((令牌)=>{
如果(!data.includes(token))expotkens.push(token);
});
}
});
控制台日志(“expoTokens”);
console.log(expotokes);
//做
//使用expoTokens和Wait发送通知
//我们返回让云函数知道我们已经完成了
返回;
只是不要忘记函数中的
async
,比如
async(snap,context)=>{}