setTimeout ->
console.log 'foo'
setTimeout ->
console.log 'bar'
setTimeout ->
console.log 'baz'
, 1000
, 1000
, 1000
使用 jQuery.Deferred 是否可以达到相同的结果?也许像下面这样:
someFunction()
.then(-> console.log 'foo')
.then(delay 1000)
.then(-> console.log 'bar')
.then(delay 1000)
.then(-> console.log 'baz')
也许我错误地认为 Promise 可以让编写变得容易:执行 A,然后一旦完成,执行 B,然后一旦完成,执行 C。
最佳答案
您可以通过返回一个newDeferred
对象来链接.then()
调用。特别是为了延迟,你可以使用类似的东西:
function someFunction() {
var ret = new $.Deferred();
// setTimeout just to simulate `someFunction` taking 1000ms to complete its deferred
setTimeout(function () {
ret.resolve();
}, 1000);
return ret;
}
function logger(str) {
return function () {
console.log("Logger:", str);
};
}
function delay(time) {
return function () {
console.log("Delaying");
var ret = new $.Deferred();
setTimeout(function () {
ret.resolve();
}, time);
return ret;
};
}
someFunction()
.then(logger("foo"))
.then(delay(3000))
.then(logger("bar"))
.then(delay(3000))
.then(logger("baz"));
关于jquery - 使用 jQuery.Deferred 避免嵌套 setTimeout 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983331/