2015-10-01 11 views
23

私は、次のようなものがあります。jQuery Deferredの「always」と同等のES6 Promiseとは何ですか?

getUser("foo").then(handleSuccess, handleError).always(tidyUp); 

getUserはjQueryの繰延オブジェクトを返します。

は私がPromise.resolveを使用して、ネイティブの約束に繰延オブジェクトに変換することができますthis articleから理解したので、私はしかしalways方法を提供していません

Promise.resolve(getUser("foo")) 
    .then(handleSuccess) 
    .catch(handleError) 

Promise APIを書くことができますので、私はどのように思ったんだけどそれを処理する必要があります。

次のとおりですか?

私は次はあなたが探しているものだと思います
Promise.resolve(getUser("foo")) 
    .then(handleSuccess) 
    .then(tidyUp) 
    .catch(handleError) 
    .then(tidyUp) 

答えて

19

Promise.resolve(getUser("foo")) 
    .then(handleSuccess, handleError) 
    .then(tidyUp) 

tidyUpが常に呼び出されます。完全な例については、以下を参照してくださいjsbin:http://jsbin.com/lujubu/edit?html,js,console,output

+4

はい、そのおかげで動作します。また、私は 'Promise.resolve(getUser(" foo "))then(handleSuccess).catch(handleError).then(tidyUp)'を実行すること、つまり 'catch 'を保持することもできることを認識させました。 – user5325596

3

は、それが常に呼び出されます保証するためにresolverejectのためのハンドラとしてごalways機能を使用してください。

function getUser(result) { 
    switch (result) { 
     case 'good': 
      return Promise.resolve(); 

     case 'bad': 
      return Promise.reject(); 

     case 'ugly': 
      return new Promise(() => { throw new Error() }) 
    } 
} 

function handleSuccess() { console.log('success') } 
function handleError() { console.log('error') } 
function tidyUp() { console.log('all tidy now') } 


Promise.resolve(getUser('good')) 
    .then(handleSuccess) 
    .catch(handleError) 
    .then(tidyUp, tidyUp); 

Promise.resolve(getUser('bad')) 
    .then(handleSuccess) 
    .catch(handleError) 
    .then(tidyUp, tidyUp); 

Promise.resolve(getUser('ugly')) 
    .then(handleSuccess) 
    .catch(handleError) 
    .then(tidyUp, tidyUp); 

// success 
// error 
// error 
// all tidy now 
// all tidy now 
// all tidy now 

Promise API Reference

関連する問題