【发布时间】:2013-10-06 02:27:11
【问题描述】:
//just a function to simulate, ajax etc.
function wait () {
var deferred = $.Deferred();
console.log('hello')setTimeout(deferred.resolve,3000);
return deferred.promise();
}
var func = function () {
var first,before,after,resolvePromise,main;
var beforeList = [];
var afterList = [];
var def = new $.Deferred();
//push to array function
first = function () {
beforeList.push(wait);
beforeList.push(wait);
afterList.push(wait);
console.log('first done', beforeList,afterList)
}
//this must run before the main
before = function () {
var beforeDef = new $.Deferred();
$.when.apply($,beforeList).done(function () {
console.log('before', new Date().getTime())
beforeDef.resolve();
});
return beforeDef.promise();
}
//this must run after main
after = function () {
var afterDef = new $.Deferred();
$.when.apply($,afterList).done(function () {
console.log('after', new Date().getTime())
afterDef.resolve();
});
return afterDef.promise();
}
// this is main function
main = function () {
console.log('doing job in main function', new Date().getTime())
}
//handler
resolvePromise = function () {
def.resolve();
return def.promise();
}
//action
var step = def.then(first);
var step1 = step.then(before);
var step2 = step1.then(main);
var step3 = step2.then(after)
.done(function () {
console.log('all done')
});
resolvePromise();
}
func();
我刚刚开始学习 promise&deferred。这是我的代码。我的主要目标是“创建两个充满功能的数组”。 afterList 和 beforeList 是哪个名字。我想在我的主要功能之前和之后运行它们。
我的主要问题是我无法使 $.when() 中的列表工作。
【问题讨论】:
-
除了这看起来过于复杂之外,我认为您使用 $.when 和 then 的方式没有任何问题。
-
而且它似乎以正确的顺序运行:jsfiddle.net/pRKt6
-
是的,订单是正确的,但它应该在控制台说“你好”:) 之前 2 次,之后 1 次。
-
啊,你永远不会执行等待方法。 :p
-
我想什么时候方法可以做到。我错了吗 ? :) 大师教我!
标签: javascript jquery promise