有条件地延迟功能执行

时间:2013-08-13 11:34:52

标签: javascript jquery performance frontend

在前端JavaScript中,我有一个函数funcA,一旦客户端收到特定消息A,它通常会执行

服务器可能会在发送B之前发送另一条消息A 。发生这种情况时,客户端会收到两条消息:第一个B然后A,另一个函数funcB(由B触发)将在funcA之前执行

现在,有一种优雅的方式可以在收到funcA时延迟A的执行,如果先funcB执行了吗?

下面的一些伪代码说明了这个想法:

...

// called upon receiving msg `A`
// but need to delay its execution if receiving `B` and executing funcB first
function funcA(param) {
    ...
}

// called upon receiving msg `B`
function funcB(param) {
    ...
}

...

// receiving messages from server

var msg = JSON.parse(...);

if (msg.type === 'A') {
    funcA(msg.data);
}
else if (msg.type === 'B') {
    funcB(msg.data);
}
else if (msg.type === 'C') {
    ...
}

// deal with other types of message
...

我可以考虑在{em>每次执行funcA之前使用'flag'和条件检查的组合,这对我来说似乎不太优雅。

请注意:这个问题关于如何延迟函数的执行(通常使用setTimeout实现),而是要求设计模式/结构给定一个特定的代码逻辑。

1 个答案:

答案 0 :(得分:2)

如果调用funcB,您需要一种方法来跟踪,然后您可以检查funcA内的内容并让它自行调用:

var funcBCalled = false;

function funcB() {
  funcBCalled = true;
  // do something...
}

function funcA() {
  if (funcBCalled) {
    funcBCalled = false;
    window.setTimeout(funcA, 1000);
  } else {
    // do something
  }
}