【发布时间】:2020-02-16 15:39:44
【问题描述】:
我正在尝试根据某些参数的验证来获取用户 ID。问题是代码没有按正确的顺序!!
执行输出是
- KlFHdAgDUUUIKaPeObs9RiSBlOp1
- 通知正确
- 动物真实
输出应该是
- 通知正确
- 动物真实
- KlFHdAgDUUUIKaPeObs9RiSBlOp1
exports.bulkMsg = functions.firestore
.document('/bulkMsgs/{bulkMsgsId}').onUpdate(async(snap, context) => {
function processBulKMsg(onUsers) {
anPromises = [];
notPromises = [];
onUsers.forEach((oneUser) => {
var status = false;
if (oneUser.id === 'KlFHdAgDUUUIKaPeObs9RiSBlOp1') {
const onNot = admin.firestore().collection('users').doc(oneUser.id).collection('notifications').get().then(oneNot => {
if (notNumStatus === true) {
if ((oneNot.size >= notNumMin) && (oneNot.size <= notNumMax)) {
status = status ? true : false;
} else {
status = false;
}
}
console.log('Notifications', status);
return oneNot;
}).catch(err => {
console.log('Error getting notifications', err);
return null;
});
notPromises.push(onNot);
const allAn = admin.firestore().collection('users').doc(oneUser.id).collection('animals').get().then(oneAn => {
if (anCountStatus === true) {
if ((oneAn.size >= inFarmMin) && (oneAn.size <= inFarmMax)) {
status = status ? true : false;
} else {
status = false;
}
}
console.log('Animals', status);
return oneAn;
}).catch(err => {
console.log('Error getting animals', err);
return null;
});
anPromises.push(allAn);
if (status) {
console.log(oneUser.id);
}
}
});
return Promise.all([anPromises, notPromises]);
}
return admin.firestore().collection('users/')
.where("notification", "==", "true")
.get().then(onUsers => {
return processBulKMsg(onUsers);
}).catch(err => {
console.log('Error getting user', err);
return null;
});
});
【问题讨论】:
-
从您描述的行为来看,您的异步操作之一未得到正确处理。但是这段代码中发生的事情太多了,我无法快速扫描你到底哪里出错了。请用更少的代码重现问题,以便我们更有可能帮助找出问题所在。另请参阅how to create a minimal, complete, verifiable example。
-
@FrankvanPuffelen - 感谢您的回复。我已经编辑了原始帖子并最小化了代码。谢谢
标签: typescript firebase google-cloud-firestore google-cloud-functions