【发布时间】:2015-10-16 04:22:31
【问题描述】:
我一直试图围绕 jquery deferred 和 then 函数。正如我从jQuery then documentation 收集到的,then 函数将回调的返回值发送到下一个then 处理程序(如果它们如此链接)。鉴于此,为什么我的代码没有按预期工作?
function log(message) {
var d = new Date();
$('#output').append('<div>' + d.getSeconds() + '.' + d.getMilliseconds() + ': ' + message + '</div>');
}
function asyncWait(millis) {
var dfd = $.Deferred();
setTimeout(function () {
var d = new Date();
log('done waiting for ' + millis + 'ms');
dfd.resolve(millis);
}, millis);
return dfd.promise();
}
function startTest0() {
return asyncWait(1000).then(asyncWait).then(asyncWait).then(asyncWait).done(function () {
log('all done, 4 times');
});
}
function startTest() {
asyncWait(500).then(function () {
return asyncwait(1000);
}).then(function () {
return asyncWait(1500);
}).then(function () {
return asyncWait(2000);
}).done(function () {
log('all done');
});
}
log('welcome');
log('starting test ...');
startTest0().done(function() { log('starting the second test'); startTest(); });
这里是 JS 小提琴:Sample code。我期待在两个测试中都有类似的行为,但有些事情让我无法理解。我错过了什么?
提前致谢!
编辑:查看更新的DEMO,我正在尝试链接异步操作以在前一个操作完成后开始。
【问题讨论】:
-
“我正在尝试链接异步操作以在前一个操作完成后开始。” - 这就是您的代码准确地要做的事情,如果你真的修正了我在回答中提到的错字。
标签: javascript jquery jquery-deferred