我很难理解创建自己的Deferred对象的价值。
假设你有以下jQuery
function doStuffFirst() {
var dfd = $.Deferred();
// do some stuff here
setTimeout(function() {
dfd.resolve();
},1);
return dfd.promise();
}
function doStuffAfter() {
//do some other stuff
}
$.when(doStuffFirst()).done(doStuffAfter);
我实际上并不知道doStuffFirst()
已经完成,只是等了一段时间才开始doStuffAfter()
为什么这比仅仅去
更好 function doStuffFirst() {
// do some stuff here
}
setTimeout(function() {
//do some other stuff
},1);
答案 0 :(得分:1)
你知道它已经完成了;但它没有用,因为你没有异步执行你的任务。任务执行,然后几乎立即创建并触发延迟。但是,如果您更改为:
function doStuffFirst() {
var dfd = $.Deferred();
setTimeout(function() {
// do some stuff HERE
dfd.resolve();
},1);
return dfd.promise();
}
然后它变得有用,因为它将立即返回,但稍后解决(任务完成时)。虽然你只有一个异步任务,但是使用延迟与使用普通回调没有太大的不同(只是更复杂,更漂亮,而且依赖性是另一种方式:回调在中去,而承诺来了 out 调度任务的例程)。但是,如果您有更复杂的要求,例如要同时执行两个异步任务,但要等到两者完成,那么承诺就会更优越。
答案 1 :(得分:0)
使用setTimeout
只需在给定时间后执行代码,而promises会在承诺任务完成后执行代码。在处理完成时间未知的事物(例如ajax请求)时使用Promises。在setTimeout
中,您知道何时执行某些代码。