方法返回后执行某些操作

时间:2010-11-29 16:57:32

标签: java asynchronous executable deferred-execution

这是我在伪代码中的情况:

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中实现这一点,但欢迎使用通用解决方案。

5 个答案:

答案 0 :(得分:1)

许多很好的解决方案,但我建议使用回电。

在方法返回后不要将其视为做某事,将其视为回调报告状态或触发事件。

搜索事件模式,或使用Java回调。这是one link I found

delegation pattern非常相似。

答案 1 :(得分:0)

您是否可以先发送响应,然后执行“if(playersConnected”检查?

答案 2 :(得分:0)

我不确定你在这里的闭包语法。你可以这样做吗?

function onRequest() {
    playersConnected++;

    sendResponse(OK);

    if (playersConnected == 4) {
        sendAllPlayersTheirCards()
    }
}

答案 3 :(得分:0)

这似乎是一个相关的教程:

Using Callable to Return Results From Runnables

答案 4 :(得分:0)

我可以这样做:

function onRequest(request) {

 game.handleRequest(request, function(response) {
  sendResponse(response);
 }

}

class game
function handleRequest(request, sendResponse:Function) {
 players++;
 sendResponse(OK);
 if (players == 4) sendCards();
}