多依赖承诺链

时间:2016-04-06 21:26:51

标签: javascript asynchronous promise extendscript ecmascript-3

我正在尝试实现以下用例:

  1. 我有一系列同步任务
  2. 每个同步任务都需要触发异步任务
  3. 异步任务无法同时运行,因此每个任务都会等待其触发器(2)和其前任的完成。
  4. enter image description here

    我的第一个想法是将每个任务(sync& async)转换为promise,然后创建两个promise链。 但我正在努力寻找一种方法来实现具有双重依赖的异步任务链。

    我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

您只需要一个承诺链:

syncTask1();
var promise1 = asyncTask1(); // Triggers first async task
syncTask2();
var promise2 = promise1.then( asyncTask2 );
syncTask3();
var promise3 = promise2.then( asyncTask3 );
...

当然,您需要为自己的任务命名并承诺有意义。这样做的行为与此相同,因为JavaScript是单线程的,并且所有同步任务都将在asyncTask1的承诺可以解决之前完成:

syncTask1();
var promise1 = asyncTask1(); // Triggers first async task
syncTask2();
syncTask3();
...
var promise2 = promise1.then( asyncTask2 );
var promise3 = promise2.then( asyncTask3 );
...

答案 1 :(得分:0)

从图中可以看出Async2和3不仅仅依赖于相对同步函数的完全填充,

使用您的命名约定,这就是我将承诺链接起来的方式:

               Synctask1
               |       |
             Sync2    Async1
             |     \     |
           Sync3    Async2(resolved with promiseAll[Async1, Sync2]
                \     |
                 \    |
                 Async3(resolved with promiseAll[Async2, Sync3]