如何处理“promis”数组

我构build了一个数据库,其中包含从请求密钥接收来自Firebase的消息的用户列表。 每次插入状态为“open”的新请求时,我都会尝试按“Timestamp”的值对它们进行sorting,然后按照此顺序发送给接收方(每个接收方都会收到一条消息)。 如果接收者列表是空的,我想保留它,直到另一个接收者将被添加到列表并继续下一个请求。 我不知道如何一个接一个地发送每一个“承诺”

exports.notificationListener=functions.database.ref('requests') .onWrite(event=>{ const ref = event.data.ref; let requests= []; var query=ref.orderByChild('TimeStamp'); query.once('value',function(snap){ snap.forEach(request=>{ if(request.val().Status==OPEN) requests.push(request.key); }); }); for (let key of requests) { return getOnlinReceiversToken().then(token=>{ let msg = { data: { source: key } }; return admin.messaging().sendToDevice(token, msg); )}; } }); function getOnlinReceiversToken() { let result = new Promise((resolve, reject) => { receiverRef.once('value', (snap) => { resolve(snap); }, (err) => { reject(err); }); }); return result.then(snap => { snap.forEach(child => { if(child.Status == ONLINE){ let token = helper.getToken(child.key,db); break; } }); return token; }); } 

尝试这样的事情

 var promisesArray = []; for (let key of requests) { var currentPromise = getOnlinReceiversToken().then(token=>{ let msg = { data: { source: key } }; return admin.messaging().sendToDevice(token, msg); }); promisesArray.push(currentPromise); } return Promise.all(promisesArray); 

你可以使用一个调用自己的函数来顺序地遍历promise,然后依次发送它们

 function runPromise(index) { // jump out of loop if there are no more requests if (index >= requests.length) { return console.log('finished!'); } return getOnlinReceiversToken().then((token) => { let msg = { data: { source: key } }; admin.messaging().sendToDevice(token, msg); // iterate to the next item return runPromise(index + 1); }).catch((err) => { // break out of loop when an error occurs console.log(err); }); } runPromise(0);