//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() 中的列表工作。