Javascript 需要一个库或设计模式来处理异步代码中的依赖地狱

Javascript 需要一个库或设计模式来处理异步代码中的依赖地狱,javascript,algorithm,design-patterns,Javascript,Algorithm,Design Patterns,我将描述这种“依赖地狱”的简化示例 想象一个带有“播放/暂停”和“静音/取消静音”按钮的视频播放器。暂停视频应该暂停声音,而不是使其静音,因此取消暂停视频应该取消暂停音频 然后,假设我们在单独的文件中下载音频和视频,因此我们有四个成功/错误回调。想象一下,视频可以在没有音频的情况下播放,但不能反过来播放。现在想象一下,如果需求更新,视频和音频应该互相等待,那么应该对代码进行多少更改 目前我正在使用回调和布尔变量处理这个问题。我有一种感觉,这是石器时代,因为类似这样的东西: if (videoSh

我将描述这种“依赖地狱”的简化示例

想象一个带有“播放/暂停”和“静音/取消静音”按钮的视频播放器。暂停视频应该暂停声音,而不是使其静音,因此取消暂停视频应该取消暂停音频

然后,假设我们在单独的文件中下载音频和视频,因此我们有四个成功/错误回调。想象一下,视频可以在没有音频的情况下播放,但不能反过来播放。现在想象一下,如果需求更新,视频和音频应该互相等待,那么应该对代码进行多少更改

目前我正在使用回调和布尔变量处理这个问题。我有一种感觉,这是石器时代,因为类似这样的东西:

if (videoShouldPlay && audioShouldPlay && isAudioPlaying && isVideoDownloaded && isAudioDownloaded) {
或4个类似回调:

audio.onload = function () {
    if (isVideoDownloaded)
       .....
    } else { ...
}
既不可读也不可维护。依赖项的数量随着组件的数量呈指数增长,但是当我可以定义一些一般规则时,我不应该跟踪每个依赖项


我相信计算机科学已经解决了这个问题。

在我看来,你需要一个解决方案。让我们以“播放”和“暂停”状态为例。过渡规则“玩”➜ “暂停”就是你写的:“暂停视频应该暂停声音,但不能使其静音”,等等。如果没有看到你手头上的实际问题,就很难讲述更多


我建议第29章State from,并用State from替换State-changing条件。我个人觉得这本名著有点难读,但它是其中的状态模式。

我的想法是不要在问题中发布太多代码,因为问题是泛型的。你的回答似乎正是我想要的。@Dan很高兴听到我的回答似乎很有帮助。是的,我理解你为什么不发布更多代码;我只是解释为什么我没有详细说明如何解决你的问题。另外,一个有用的解释需要一本书的章节长度,在Stackoverflow这里并不合适!