web-dev-qa-db-ja.com

ES6 PromiseでjQuery Deferredの「always」に相当するものは何ですか?

私は次のようなものを持っています:

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

getUserはjQuery Deferredオブジェクトを返します。

私は この記事 から、Promise.resolveを使用してDeferredオブジェクトをネイティブPromiseに変換できることを理解しているので、

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

Promise APIalwaysメソッドを提供していません。そのため、それをどのように処理する必要があるのか​​と思います。

次のようですか?

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

以下があなたが探しているものだと思います:

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

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

20
Oleksii Rudenko

always関数をresolveおよびrejectのハンドラーとして使用して、常に呼ばれた。

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リファレンス

3
reergymerej