在前端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
实现),而是要求设计模式/结构给定一个特定的代码逻辑。
答案 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
}
}