链接 dojo 延迟

Chaining dojo Deferred

我在使用 "then" 和 Deferred 对象链接函数时遇到问题。

我想将多个函数(进程)链接在一起,以便在一个带有异步调用的函数完全完成后,另一个函数开始,依此类推。

类似于:

process1().then(process2()).then(process3());

我已经按照许多不同的教程进行了不同的操作,但我仍然无法获得一个有效的示例。

我错过了什么?

这是一个Fiddle Link

您错过了要求部分 (require(["dojo/Deferred"]),现代 dojo 使用 AMD 加载来加载所需的模块,在您将在代码中使用的回调函数中进行引用。

这是一个有效的 Fiddle

在上面 fiddle 我已经 select dojo 作为 lib 并添加一些配置如下图

下面的片段:

require(["dojo/Deferred",],function(Deferred){
 function process1() {
      var dfd = new Deferred();

      // perform some async logic; resolve the promise
      setTimeout(function () {
          $("#output").html("process 1 complete");
          dfd.resolve("process 1 complete");
      }, 1000);

      return dfd.promise;
  }
 
  function process2() {
      var dfd = new Deferred();

      // perform some async logic; resolve the promise
      setTimeout(function () {
          $("#output").html("process 2 complete");
          dfd.resolve("process 2 complete");
      }, 1000);

      return dfd.promise;
  }
  
  process1().then(function (){
    return process2();
  });
  
});
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output">Start</div>

此外,请注意,您可以按照 Fiddle

中所示进行多重链接