代码之家  ›  专栏  ›  技术社区  ›  user14764 Anirudh Ashok

Firebase管理员。auth()。getUser(uid)挂起(NodeJS)

  •  8
  • user14764 Anirudh Ashok  · 技术社区  · 7 年前

    我正在使用 admin.auth().getUser(uid)

    以下是我的函数的完整代码(在TypeScript中):

    public getUser(uid: string): any {
      console.log('FirebaseManager getUser method start');
      const self: FirebaseManager = this;
      const promise: any = self.getDeferred();
    
      admin.auth().getUser(uid)
      .then(function(userRecord: admin.auth.UserRecord) {
        console.log("Successfully fetched user data:", userRecord);
        promise.resolve(userRecord);
      })
      .catch(function(error: FirebaseError) {
        console.log("Error fetching user data:", error.errorInfo);
        promise.reject('Error getting Firebase user ' + uid);
      });
    
      return promise.promise;
    }
    

    注意,如果我注释掉管理员。auth()。getUser(uid)块(并将其替换为 promise.resolve("ok")

    public getUser(uid: string): any {
      console.log('FirebaseManager getUser method start');
      const self: FirebaseManager = this;
      const promise: any = self.getDeferred();
    
      promise.resolve("ok");
    
      return promise.promise;
    }
    

    我使用的是无服务器1.21.1、Typescript 2.5.2、Node 6.11.3或8.4.0(两种不同的开发环境,结果都相同)

    1 回复  |  直到 7 年前
        1
  •  11
  •   user14764 Anirudh Ashok    7 年前

    显然,你需要逃跑 admin.app().delete(); ,否则与Firebase的连接将保持活动状态,从而阻止进程终止。

    因此,在我的示例代码中,考虑到在运行此函数后,我将不再需要使用Firebase:

    public getUser(uid: string): any {
      console.log('FirebaseManager getUser method start');
      const self: FirebaseManager = this;
      const promise: any = self.getDeferred();
    
      admin.auth().getUser(uid)
      .then(function(userRecord: admin.auth.UserRecord) {
        console.log("Successfully fetched user data:", userRecord);
        admin.app().delete();
        promise.resolve(userRecord);
      })
      .catch(function(error: FirebaseError) {
        console.log("Error fetching user data:", error.errorInfo);
        admin.app().delete();
        promise.reject('Error getting Firebase user ' + uid);
      });
    
      return promise.promise;
    }