有条件地延迟功能执行

Conditionally delay function execution

本文关键字:执行 功能 延迟 有条件      更新时间:2023-09-26

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

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

现在,如果funcB首先执行,是否有一种优雅的方法可以在接收到A时延迟执行funcA

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

...
// 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
...

我可以考虑在每次执行funcA之前使用"flag"和条件检查的组合,这对我来说似乎不是很优雅

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

您需要一种方法来跟踪是否调用了funcB,然后您可以在funcA内部检查它,并让它延迟调用自己:

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