【发布时间】:2019-03-19 06:10:44
【问题描述】:
喜欢 nodeJS 和异步特性!有了这个,我很困惑如何继续,因为我无法保持嵌套承诺,当然这是不行的,所以我举起双手,因为每一步都需要使用上一步的数据完成操作。
这就是我想要完成的,代码如下。
- 一所新学院进入 /sessions/college
- 获得该密钥的值后,寻找订阅该学院的顾问。
- 为订阅顾问获取 FCM 代币
- 显然还没有进入这部分,但向订阅者发送 FCM 通知。
- 多田!
exports.newSessionNotifer = functions.database.ref('/sessions/college').onCreate((snap, context) => {
const college = snap.val();
var promises = [];
var getAdvisors = admin.database().ref('colleges').child(college).once('value').then((snapshot) => {
const people = snapshot.val();
var advisors = Object.keys(people);
return advisors;
}).then((advisors) => {
return advisors.forEach((token) => {
var advisorToken = admin.database().ref('users').child(token).child('fcmtoken').child('token').once('value');
return console.log(advisorToken);
});
});
return Promise.all(promises).then((values) => {
console.log(promises);
return console.log('Hi');
});
【问题讨论】:
-
你打算用那个
promises数组做什么? -
Don't use
forEach! 如果advisors不是数组而是firebase 快照,请先将其转换为数组。 -
顾问“可以”是一个数组,所以我想通过只做一个 forEach 来适应它成为一个数组的可能性。
-
要点(如链接中所述)是您不能将
forEach与执行异步操作的回调一起使用。改用map创建一个promise 数组。 -
I can't keep nesting promises- 事情是,你没有嵌套的承诺 - 如果你真的想要“扁平”代码......async/await来救援
标签: node.js firebase firebase-realtime-database promise google-cloud-functions