函数返回 undefined 并且 promises 未在函数 firebase 中定义

function returned undefined and promises is not defined in functions firebase

这是我的第一个 firebase 函数,它让我很头疼 :) 目的是每 24 小时更新一次来自集合用户的所有文档的计数字段。

    async function clearCountField() {
  console.log("Clearing count task start point.");
    const userSnapshots = db.collection('users').where('count', '!=', '').where('nou', '==', false).get().then(snapshot => {
      const promises = [];
      snapshot.forEach(doc => {
        promises.push(doc.ref.update({ 'count': '' }));
      });
    });
    return Promise.all(promises)
}



export const ClearCountField24h = functions.pubsub.schedule('0 0 * * *')
  .timeZone('Europe/Bucharest') //  timezone 
  .onRun((context) => {
   const promise = clearCountField().then(resolve,reject); 
});

我做错了什么?

更改以下内容:

export const ClearCountField24h = functions.pubsub.schedule('0 0 * * *')
  .timeZone('Europe/Bucharest') //  timezone 
  .onRun((context) => {
    const promise = clearCountField().then(resolve,reject); 
  }
);

为此:

export const ClearCountField24h = functions.pubsub.schedule('0 0 * * *')
  .timeZone('Europe/Bucharest') //  timezone 
  .onRun((context) => {
    return clearCountField().then(resolve,reject); 
  }
);

解决了一个问题...但是在测试功能时 Error: ReferenceError: promises is not defined 仍然存在...

forEach 循环中创建的承诺从未得到解决,因为 Promise.all() 在查询完成之前被 returned。像这样修复它:

async function clearCountField() {
  const query = db.collection('users').where('count', '!=', '').where('nou', '==', false);
  return query.get().then(snapshot => {
    const promises = snapshot.docs.map(doc => doc.ref.update({ 'count': '' }));
    return Promise.all(promises)
  }
}

导出函数中的 then 是多余的。只是 return 来自 clearCountField()

的承诺
export const ClearCountField24h = functions.pubsub.schedule('0 0 * * *')
  .timeZone('Europe/Bucharest') //  timezone 
  .onRun((context) => {
    return clearCountField();
});