0
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')
})

このコードは機能しますが、1 つの不具合があります。チェーン完成後の作業。

コンソール:

これは私が得るものです:

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 ;-))
4

1 に答える 1