gpt4 book ai didi

Java 8 Firebase 任务.await()

转载 作者:行者123 更新时间:2023-11-30 06:47:10 26 4
gpt4 key购买 nike

我在我的 Spring Boot 应用程序中使用 Firebase JAVA sdk。

尝试验证 Firebase token :

Map resp = new HashMap();

Task<FirebaseToken> task = FirebaseAuth.getInstance().verifyIdToken(info.getToken())
.addOnSuccessListener(new OnSuccessListener<FirebaseToken>() {
@Override
public void onSuccess(FirebaseToken decodedToken) {
logger.info(decodedToken.getClaims());

String uid = decodedToken.getUid();
User user = userDao.loadUserByUID(uid);

if (user == null) {
...........
}
SimpleSignInAdapter.signin(user.getUsername());

resp.put("status", "success");
resp.put("token", jwtTokenProvider.createToken(SecurityContextHolder.getContext().getAuthentication()));
logger.info(resp);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
resp.put("status", "fail");
resp.put("message", e.getMessage());
}
});
try {
Tasks.await(task);
logger.info(resp);
return resp;
} catch (ExecutionException | InterruptedException e) {
resp.put("status", "fail");
resp.put("message", e.getMessage());
return resp;
}

Tasks.await(task) 假设在 task 完成之前阻止代码执行。但是它不会阻止代码和 logger.info(resp); return resp; 在完成之前执行:

2017-09-20 16:10:30,613 INFO  [http-nio-8080-exec-1] impl.FirebaseServiceImpl (FirebaseServiceImpl.java:98) - {}
2017-09-20 16:10:30,613 INFO [pool-2-thread-2] impl.FirebaseServiceImpl$2 (FirebaseServiceImpl.java:56) - {"aud":******" ******}}
2017-09-20 16:10:43,966 INFO [pool-2-thread-2] impl.FirebaseServiceImpl$2 (FirebaseServiceImpl.java:84) -{status=success, token=......}

可能的原因是什么?

最佳答案

我认为您误解了日志。 Tasks.await() 正在执行它的工作。请记住,成功监听器没有义务准确地在 Tasks.await() 之前或之后执行。它会在任务完成后的某个时间执行,就像 Tasks.await() 在任务完成后的某个时间返回一样。另请注意,日志行来自两个不同的线程:http-nio-8080-exec-1pool-2-thread-2,并且无法保证任务完成后这两个线程将继续执行的顺序。

现在,如果你想确保运行 Tasks.await() 的线程只在成功监听器之后执行,你必须使用类似 CountDownLatch 的东西来阻塞第一个线程,直到成功监听器中的工作完成.

关于Java 8 Firebase 任务.await(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46318119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com