链接 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
中所示进行多重链接
我在使用 "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
中所示进行多重链接