如何作为函数结果多次调用sendToDevice?

时间:2018-07-16 09:34:47

标签: javascript node.js firebase google-cloud-functions

我有一个Firebase Cloud Functions脚本,我想在其中向用户发送推送通知。当我仅一次发送一组指定的令牌数组(由函数返回)时,它就可以正常工作:

return getTokens(array1).then(tokens => {
  return (admin.messaging().sendToDevice(tokens, payload));
});

但是,我似乎无法弄清楚如何使用getTokens函数的不同输入来多次执行此操作。我需要做这样的事情:

return getTokens(array1).then(tokens => {
  return (admin.messaging().sendToDevice(tokens, payload));
});

return getTokens(array2).then(tokens => {
  return (admin.messaging().sendToDevice(tokens, payload));
});

当然,上述解决方案失败了,因为第二对return then是无法访问的代码,但是我无法弄清楚如何在JavaScript中正确地做到这一点。

如何顺利处理?请事先打扰一下,如果我要提出明显的问题,我对JavaScript还是陌生的。

编辑

我尝试了以下代码:

    Promise.all([getTokens(inputArray1), getTokens(inputArray2)]).then(results => {
        const tokens1 = results[0].val();
        const tokens2 = results[1].val();
        const promises = [];
        promises.push(admin.messaging().sendToDevice(tokens1, payload));
        promises.push(admin.messaging().sendToDevice(tokens2, payload));
        return Promise.all(promises);
    });

它会产生以下错误:预期的catch()或返回

1 个答案:

答案 0 :(得分:1)

这是您的操作方式:

return Promise.all([admin.database().ref(`/tokensArray1`).once('value'), admin.database().ref(`tokensArray2`).once('value')]).then(results => {
  const tokensArray1 = results[0].val();
  const tokensArray2 = results[1].val();
  const promises = [];
  let payload = {
    notification: {
      title: 'title',
      body: 'msg',
      icon: 'default'
    }
  };
  promises.push(admin.messaging().sendToDevice(tokensArray1, payload));
  promises.push(admin.messaging().sendToDevice(tokensArray2, payload));
  return Promise.all(promises);
});