使用回调的Firestore onWrite触发器返回undefined

时间:2018-06-12 17:08:24

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

我试图在我的云功能上添加触发功能。

当文档发生变化时,我想执行一些工作。我已经在另一个文件中完成了工作的代码(我将我的工作分成了文件,所以它对我来说更容易),所以我有一个执行工作的函数,当它完成时,调用了回调。

这就是我的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

即使我在我的工作人员内部没有做任何事情,并且只要我能够得到错误就立即调用回调。

所以我理解这些功能需要响应,承诺或价值。但是,我不再在范围内,但我不想在工作结束前返回!

有任何帮助吗?谢谢你们

1 个答案:

答案 0 :(得分:0)

您执行的所有异步工作都应该由promise表示。如果您有一个执行异步工作的实用程序对象,它应该返回一个promise,以便调用者可以决定下一步该做什么。现在你只是使用回调,这会使事情变得比必要的困难(因为你必须“宣传”那些回调)。

只要在任何地方使用promises,你的功能应该如何运作就会更加明确。