var $jobApplication = $.Deferred();
$jobApplication
.progress( displayState )
.done( acceptContract )
.done( relocate )
.fail( keepCalmAndDrinkWine );
function displayState(payload){
console.log(payload.state);
if (payload.job){
$jobApplication.resolve(payload.job);
}
}
$jobApplication.notify({
state: "shortlist"
});
$jobApplication.notify({
state: "phone_interview",
date: "2013-01-23"
});
$jobApplication.notify({
state: "technical_interview",
date: "2013-02-11"
});
$jobApplication.notify({
state: "physical_interview",
date: "2013-02-14"
});
$jobApplication.notify({
state: "salary_negociation",
job: {
role: "Software Engineer",
company: "BBC",
starts: "2013-03-04"
},
date: "2013-02-14"
});
function acceptContract(jobOffer){
console.log("Contract accepted with the following details: ");
console.log(jobOffer);
}
function keepCalmAndDrinkWine(err){
console.log("Too bad it did not work for this reason: %s ", err);
}
function relocate(){
console.log("Relocating (a new Promise ;-)) ");
}
这是我描述一些我遇到麻烦的问题的例子。
我想为“acceptContract”函数添加一些回调。当“acceptContract”运行时,我的新回调会立即运行。
例如,我的第一个解决方案是添加此代码。
acceptContract = $jobApplication.promise();
acceptContract.done(function () {
console.log('call your mom')
}).done(function () {
console.log('be happy')
})
此代码有效,但有一个故障。链条完成后工作。
安慰:
这是我得到的:
phone_interview
technical_interview
physical_interview
salary_negociation
Contract accepted with the following details:
Object {role: "Software Engineer", company: "BBC", starts: "2013-03-04"}
Relocating (a new Promise ;-))
call your mom
be happy
这是我所期望的:
phone_interview
technical_interview
physical_interview
salary_negociation
Contract accepted with the following details:
Object {role: "Software Engineer", company: "BBC", starts: "2013-03-04"}
call your mom
be happy
Relocating (a new Promise ;-))