java - 如何检查 Java 中的 firebase 任务是否完成?

标签 java firebase task firebase-authentication

我有一个带有 Tomcat 8(不是 android)、Java 8 和 Firebase Admin 版本 5.2.0 的 Java Web 应用程序。 下面的代码工作正常,但我需要确保任务完成并返回一个值。

    @POST
    @Path("/verifyToken")
    @Produces(MediaType.APPLICATION_JSON)
public Response verifyToken(@Context HttpHeaders headers,@Context HttpServletRequest request) {
        try {
            String auth = headers.getRequestHeader("authorization").get(0);

            if (!auth.isEmpty()) {
                System.out.println("logged auth token: " + auth);
            }

            // validate token
            Task<FirebaseToken> task = FirebaseAuth.getInstance().verifyIdToken(auth)

            .addOnSuccessListener(new OnSuccessListener<FirebaseToken>() {
                @Override

                public void onSuccess(FirebaseToken decoded) {
                    String uid = decoded.getUid();
                    //do some stuff

                }
        });
            /*
             The return statement below shouldn't run unless "task" is 
             complete.
              task has method isComplete()
            */
            return Response.status(200).entity(user).build();

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Login Exception " + e.getMessage());
            return Response.status(500).build();
        }

    }

任务对象(任务)有一个方法“isComplete()”。但是,它可能需要多次调用。如果第一次任务没有完成,代码应该知道如何等待并在以后再次调用它,直到达到一定次数。

我被困在如何构建逻辑以正确等待并重试,直到任务完成或事件退出条件。

怎么做?

最佳答案

我强烈建议您查看 Doug Stevenson 关于 Task API 的一系列优秀博客文章。 https://firebase.googleblog.com/2016/10/become-a-firebase-taskmaster-part-4.html 中涵盖了这个具体问题。

解决方案似乎是Tasks.await(task)...

关于java - 如何检查 Java 中的 firebase 任务是否完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45046745/

相关文章:

java - 为什么大于 SECONDS 的 Java.util.concurrent.TimeUnit 类型在 Android 中不可用?

firebase - 如何修改代码以使Stream Builder具有Stream <dynamic>类型的流?

c# - 为什么锁定的 Parallel foreach 不会立即死锁?

c# - 在 WPF 应用程序的线程 (TASK) 中写入文本框

java - 使用 Kotlin 和 lambda 返回接口(interface)实现

java - Java 中能否自动将一个类的对象转换为子类并调用重载方法?

java - 我应该添加什么代码才能使之前打印的矩形保持不变,而不是在绘制新矩形时被删除?

ios - 当键为特定值时运行 firebase 云函数

firebase - 向 firestore 发送数据很慢

c# - 无法将类型 'int' 隐式转换为 '...Tasks<int>'