【问题标题】:How to properly exit firebase-admin nodejs script when all transaction is completed所有事务完成后如何正确退出firebase-admin nodejs脚本
【发布时间】:2017-06-22 21:16:22
【问题描述】:

是否有办法检查所有firebase事务是否在firebase-admin nodejs脚本中完成,并正确断开与firebase的连接并退出nodejs脚本?

目前,firebase-admin nodejs 脚本即使在所有事务完成后仍会继续运行。

【问题讨论】:

    标签: firebase-admin


    【解决方案1】:

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

    app.delete()
    

    例如,如果您使用默认应用,您可以这样做:

    firebase.app().delete()
    

    【讨论】:

    • 这是真正的答案。 process.exit() 不是关闭节点进程的最佳方式。
    • 如果您只使用firebase-admin,请使用admin.app().delete()
    【解决方案2】:

    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);
      });
    

    【讨论】:

      猜你喜欢
      • 2017-10-07
      • 2020-03-09
      • 1970-01-01
      • 2023-04-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      相关资源
      最近更新 更多