所有事务完成后如何正确退出firebase-admin nodejs脚本

And*_*See 10 firebase-admin

无论如何都要检查firebase-admin nodejs脚本中是否完成了所有firebase事务,并正确地从firebase断开连接并退出nodejs脚本?

目前,即使在所有事务完成之后,firebase-admin nodejs脚本也将继续运行.

小智 17

如果您正在跟踪所有承诺并且它们成功完成,那么正在发生的事情是应用程序保持连接打开,您可以使用以下命令终止应用程序:

app.delete()
Run Code Online (Sandbox Code Playgroud)

例如,如果您使用默认应用程序,则可以执行以下操作:

firebase.app().delete()
Run Code Online (Sandbox Code Playgroud)

  • 这才是真正的答案。`process.exit()` 不是关闭节点进程的最佳方法。 (2认同)

jwn*_*ngr 6

DatabaseReference.transaction()方法返回一个承诺,该承诺在交易完成时得到履行。您可以使用Promise.all()方法等待任意数量的这些事务承诺完成,然后调用process.exit()以结束程序。

这是一个完整的示例:

    var admin = require("firebase-admin");

    // Initialize the SDK
    var serviceAccount = require("path/to/serviceAccountKey.json");
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
    });

    // Create two transactions
    var addRef = admin.database().ref("add");
    var addPromise = addRef.transaction(function(current) {
      return (current || 0) + 1;
    });

    var subtractRef = admin.database().ref("subtract");
    var subtractPromise = subtractRef.transaction(function(current) {
      return (current || 0) - 1;
    });

    // Wait for all transactions to complete and then exit
    return Promise.all([addPromise, subtractPromise])
      .then(function() {
        console.log("Transaction promises completed! Exiting...");
        process.exit(0);
      })
      .catch(function(error) {
        console.log("Transactions failed:", error);
        process.exit(1);
      });
Run Code Online (Sandbox Code Playgroud)