函数返回 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();
});
这是我的第一个 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();
});