Javascript I';我在firebase函数上运行时得到一个空数组,但在手机上运行时得到一个带值的数组
下面是我作为firebase函数上传的代码。每当我使用firebase functions:log检查日志时,我都可以看到expoTokens数组是空的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.
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)=>{}