我试图在我的云功能上添加触发功能。
当文档发生变化时,我想执行一些工作。我已经在另一个文件中完成了工作的代码(我将我的工作分成了文件,所以它对我来说更容易),所以我有一个执行工作的函数,当它完成时,调用了回调。
这就是我的index.js的样子:
// requires...
// Express, i also use express for simulating an API
const app = express()
// So there is my Listener
const listenerForChange = functions.firestore
.document('myPath/documentName')
.onWrite((change, context) => {
const document = change.after.exists ? change.after.data() : null;
if (document != null) {
const oldDocument = change.before.data();
const newDocument = change.after.data()
// Here i call my function that is in the worker-listeners.js
listenerWorker.performStuff(newDocument, function() {
return 0
})
}
else {
console.error("Listener for classic was triggered but doc does not exist")
return 0
}
});
const api = functions.https.onRequest(app)
module.exports = {
api,
listenerForChange
}
...
有我的listenerWorker.js:
module.exports = {
performStuff: function(data, complete) {
performStuff(data, complete)
}
};
function performStuff(data, complete) {
// do stuff here ...
complete()
}
问题是我在Firebase控制台中始终出现错误:Function returned undefined, expected Promise or value
即使我在我的工作人员内部没有做任何事情,并且只要我能够得到错误就立即调用回调。
所以我理解这些功能需要响应,承诺或价值。但是,我不再在范围内,但我不想在工作结束前返回!
有任何帮助吗?谢谢你们
答案 0 :(得分:0)
您执行的所有异步工作都应该由promise表示。如果您有一个执行异步工作的实用程序对象,它应该返回一个promise,以便调用者可以决定下一步该做什么。现在你只是使用回调,这会使事情变得比必要的困难(因为你必须“宣传”那些回调)。
只要在任何地方使用promises,你的功能应该如何运作就会更加明确。