链接道场推迟

时间:2016-11-30 16:19:57

标签: javascript dojo deferred

我无法用"然后"绕着链接功能缠绕我的脑袋。和延期对象。

我希望将多个函数(进程)链接在一起,以便在完成Async调用的一个函数之后,另一个函数启动,依此类推。

类似的东西:

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

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

我错过了什么?

这是Fiddle Link

1 个答案:

答案 0 :(得分:1)

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

这是一个有效的Fiddle

在上面的小提琴中,我选择dojo作为lib并添加一些配置如下图所示

dojo conifg in jsfiddle

以下代码段:

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

中所示