私は次のようなものを持っています:
getUser("foo").then(handleSuccess, handleError).always(tidyUp);
getUser
はjQuery Deferredオブジェクトを返します。
私は この記事 から、Promise.resolve
を使用してDeferredオブジェクトをネイティブPromiseに変換できることを理解しているので、
Promise.resolve(getUser("foo"))
.then(handleSuccess)
.catch(handleError)
Promise API はalways
メソッドを提供していません。そのため、それをどのように処理する必要があるのかと思います。
次のようですか?
Promise.resolve(getUser("foo"))
.then(handleSuccess)
.then(tidyUp)
.catch(handleError)
.then(tidyUp)
以下があなたが探しているものだと思います:
Promise.resolve(getUser("foo"))
.then(handleSuccess, handleError)
.then(tidyUp)
tidyUpは常に呼び出されます。完全な例については、次のjsbinを参照してください。 http://jsbin.com/lujubu/edit?html,js,console,output
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