使用带有后台触发器的firebase云函数,如果没有处于挂起状态的promise,Doug Stevenson建议我们返回null
。以下是他建议的两个地方:
https://youtu.be/7IkUgCLr5oA?t=120
https://stackoverflow.com/a/52214464/188740
云函数中的null
有什么特殊处理吗?
例如,所有这些都应该正确终止:
export const onFooWrite = functions.firestore
.document('foos/{fooId}')
.onWrite((change, context) => {
// do nothing (i.e. returns undefined)
});
export const onFooWrite = functions.firestore
.document('foos/{fooId}')
.onWrite((change, context) => {
return someAsyncFunction(); // returns a promise
});
export const onFooWrite = functions.firestore
.document('foos/{fooId}')
.onWrite((change, context) => {
if (something) return; // returns nothing (i.e. undefined)
return someAsyncFunction(); // returns a promise
});
export const onFooWrite = functions.firestore
.document('foos/{fooId}')
.onWrite(async (change, context) => {
await someAsyncFunction();
// returns nothing AFTER the promise is resolved
});
我相信这些都很好,但Doug Stevenson建议在我们没有返回承诺时返回null
。null
有特殊治疗吗?
我发现你当然必须听从Doug的建议,并尝试返回null
,这也是事件驱动函数无法完成的原因之一
Node.js中编写的函数返回被拒绝的promise或将非null值传递给回调时。
该函数在默认情况下停止执行,并且该事件被丢弃。
您还需要终止后台函数并返回null值或使用其他promise方法。
如果函数创建后台任务(如线程、期货、Node.js Promise对象、回调或系统进程(,则必须在从函数返回之前终止或以其他方式解决这些任务。在从特定执行返回之前未终止的任何任务都可能无法完成,也可能导致未定义的行为。