Java 在方法返回后执行某些操作
这是我在伪代码中的情况:Java 在方法返回后执行某些操作,java,asynchronous,executable,deferred-execution,Java,Asynchronous,Executable,Deferred Execution,这是我在伪代码中的情况: function onRequest() { receiveConnectionRequest(); response = function onConnect() { playersConnected++; if (playersConnected == 4) { sendAllPlayersTheirCards() } return OK; }();
function onRequest() {
receiveConnectionRequest();
response = function onConnect() {
playersConnected++;
if (playersConnected == 4) {
sendAllPlayersTheirCards()
}
return OK;
}();
sendResponse(response);
}
当玩家1-3连接时,他们将被添加到玩家列表中,并返回OK,此时他们将在自己的一侧设置装备。然而,当玩家4连接时,在发送对其请求的响应之前,所有玩家都会收到他们的卡。由于玩家4尚未收到对其请求的响应,因此他尚未正确初始化,并且在收到卡时出现错误
我想要的是:
function onRequest() {
receiveConnectionRequest();
response = function onConnect() {
playersConnected++;
if (playersConnected == 4) {
plan(sendAllPlayersTheirCards())
}
return OK;
}();
sendResponse(response);
executePlanned() // now cards are sent
}
这有一个普遍的模式吗?onConnect函数位于不同的类中,不应该知道onRequest的实现细节
我特别尝试在Java中实现这一点,但欢迎使用通用解决方案。您不能先发送响应,然后再执行“if(playersConnected)”检查吗?我不确定您在这里使用的这种闭包语法。您可以用它来代替吗
function onRequest() {
playersConnected++;
sendResponse(OK);
if (playersConnected == 4) {
sendAllPlayersTheirCards()
}
}
有很多很好的解决方案,但我建议使用回电 不要将其视为在方法返回后执行某些操作,而应将其视为回调以报告状态或触发事件 在Java中搜索事件模式或回调
与非常相似。这似乎是一个相关的教程:
我可以这样做:
function onRequest(request) {
game.handleRequest(request, function(response) {
sendResponse(response);
}
}
class game
function handleRequest(request, sendResponse:Function) {
players++;
sendResponse(OK);
if (players == 4) sendCards();
}
看起来像delegation.plan()在这里设置委派和executePlanned()正在调用排队操作。我不能,因为处理请求接收和响应发送的代码是通用程序包的一部分,而执行PlayerConnection++的代码是另一个特定于游戏的程序包的一部分。在我当前的设置中,响应必须由检查是否所有玩家都已注册的函数返回有联系的