我在Firebase Admin SDK(NodeJS)中使用admin.auth().getUser(uid),在无服务器项目中,它确实成功返回结果。但即使我的函数返回结果,我的lambda仍然没有终止,我必须使用CTRL + C来结束它。
这是我的函数的完整代码(在TypeScript中):
group_by_window
我做错了吗?
请注意,如果我注释掉admin.auth()。getUser(uid)块(并将其替换为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;
}
),我的函数会正确终止。我的意思是,这不会挂起(但它有点无用^^):
promise.resolve("ok")
我使用无服务器1.21.1,打字稿2.5.2,节点6.11.3或8.4.0(2个不同的开发环境,两个结果相同)
答案 0 :(得分:4)
显然,您需要运行admin.app().delete();
,否则与Firebase的连接仍然有效,从而阻止进程终止。
所以在我的示例代码中,考虑到在运行此函数后我不再需要使用Firebase:
namespace ST\BackofficeBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use ST\UserBundle\Entity\Operation;
use ST\UserBundle\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;