在promise链中传递数组

时间:2018-05-27 20:24:33

标签: javascript es6-promise

我正在尝试为受邀参加活动的所有客人发送通知。

以下代码最多可返回console.log(guestPlayerIds);,返回undefined。通过guestPlayerIds的最佳方式是什么?

exports.sendNewEventFcm = functions.database.ref('/fcm/{pushID}').onWrite(event => {

  const eventID = event.params.pushID;
  const dsnap = event.data.val();

  // Exit when the data is deleted.
  if (!event.data.exists()) {
    return;
  }

  let guests = Object.keys(dsnap);

  const promises = guests.map((data) => admin.database().ref('playerIds').child(data).once('value'));

  return Promise.all(promises).then(data => {

    let guestPlayerIds = [];

    let returns = data.map(item => {
      let itemVal = Object.keys(item.val())[0];
      console.log(Object.keys(item.val())[0])
      guestPlayerIds.push(itemVal);

    });
  }).then(guestPlayerIds => {
    console.log(guestPlayerIds);
  })

});

1 个答案:

答案 0 :(得分:1)

使用map很好,但你应该在回调中返回一些内容,然后返回整体map的结果:

return data.map(item => {
  let itemVal = Object.keys(item.val())[0];
  console.log(Object.keys(item.val())[0])
  return itemVal;
});

此时你实际上并不需要数组变量guestPlayerIds。只有在随后的then中,您才可以像使用它一样使用它。