我创建了一个云函数,该函数进入名为“属性”的firebase集合,然后进入名为“ mid_tenancy”的特定属性内的子集合。然后,在“ mid_tenancy”的ID中,我遍历租赁的每个成员并访问其电子邮件。
但是,我遇到的问题是,该电子邮件仅发送到循环中的第一封电子邮件,而不发送给其他任何电子邮件。这是我的数据库的外观:
我出于明显原因删除了邮件
这是我的云功能:
export const midTenancyEmail = functions.firestore
.document('properties/{propertyId}/mid_tenancy/{midTenancyId}')
.onCreate(event => {
const propertyId = event.params.propertyId;
const midTenancyId = event.params.midTenancyId;
const db = admin.firestore();
const propertyDoc = db.collection('properties').doc(propertyId);
const midTenancyDoc = propertyDoc.collection('mid_tenancy').doc(midTenancyId);
let mid_tenancy;
return propertyDoc
.get()
.then(doc => {
const property = doc.data();
midTenancyDoc.get().then(data => {
mid_tenancy = data.data();
for(let tenant of mid_tenancy.mid_tenants) {
let msg = {
to: tenant.mid_tenant_email,
from: 'email',
// custom templates
subject: 'You have a new direct message',
templateId: 'id',
substitutionWrappers: ['{{', '}}'],
substitutions: {
name: tenant.mid_tenant_name,
message: tenant.status,
}
};
return sgMail.send(msg);
}
})
})
.then(email => {
console.log('email sent: ', email);
})
.catch(err => {
console.log(err);
})
});
谁知道为什么只发送一封电子邮件?而不是循环中的所有电子邮件?在第一个循环之后似乎有东西打破了循环。
在循环之前,我已经完成了:console.log(mid_tenancy.mid_tenants[1].mid_tenant_name
,只是为了确保它可以访问并且记录了日志。
答案 0 :(得分:2)
在第一次迭代结束时,您将在for循环中返回
AND (area like'%New york%' or area like'%Las vegas%')
这将导致for循环停止迭代。
答案 1 :(得分:2)
您需要将每个电子邮件任务推送到一组承诺中,然后返回所有承诺return Promise.all(promises)
:
export const midTenancyEmail = functions.firestore
.document('properties/{propertyId}/mid_tenancy/{midTenancyId}')
.onCreate(event => {
const propertyId = event.params.propertyId;
const midTenancyId = event.params.midTenancyId;
const db = admin.firestore();
const propertyDoc = db.collection('properties').doc(propertyId);
const midTenancyDoc = propertyDoc.collection('mid_tenancy').doc(midTenancyId);
let mid_tenancy;
return propertyDoc
.get()
.then(doc => {
const property = doc.data();
midTenancyDoc.get().then(data => {
mid_tenancy = data.data();
const promises = [];
for (let tenant of mid_tenancy.mid_tenants) {
let msg = {
to: tenant.mid_tenant_email,
from: 'email',
// custom templates
subject: 'You have a new direct message',
templateId: 'id',
substitutionWrappers: ['{{', '}}'],
substitutions: {
name: tenant.mid_tenant_name,
message: tenant.status,
}
};
promises.push(sgMail.send(msg)) ;
}
return Promise.all(promises);
});
return null;
})
.catch(err => {
console.log(err);
});
});