如何解决服务层的异步java方法
我正在使用一个名为 PubNub 的库来发布消息。 PubNub 方法异步发布消息,它有办法查看消息是否已发布。
我正在使用 Spring MVC 和 ThymeLeaf,所以我想在获得消息状态(错误或成功)后将响应发送回我的前端,但是,我不知道如何等到我的PubNub 方法完成,然后发送结果。代码如下:
@Controller
public class HomeController {
@PostMapping("/triggerDevices")
public String triggerDevices(@modelattribute(value = "message") Message message,Model model) {
//
//
// validations and build data
//
//
MyResult result = null;
//Async method
pubNub.publish()
.message(message)
.channel(channel)
.async((result,status) -> {
//This block takes some time
if (status == null || status.isError()) {
//Error case
result = new MyResult (false,status.errorMessage(),message.device);
} else {
//Success case
result = new MyResult (true,null,message.device);
}
});
//Result
model.addAttribute("result",result);
return "home :: info-success";
}
}
希望有人能帮助我,非常感谢。
解决方法
PubNub Java SDK 发布 sync
只需使用 sync
方法而不是 async
PNPublishResult result = pubnub.publish()
.channel("coolChannel")
.message("test")
.shouldStore(true)
.ttl(10)
.sync();
查看完整的PubNub SDK Java Docs for publish/sync。
那应该为您做。 干杯!
,使用同步很容易解决!但是如果你需要保持异步,我会在你得到结果后在异步函数结果中返回:
//Success case
result = new MyResult (true,null,message.device);
model.addAttribute("result",result);
return "home :: info-success";
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。