もはや Promise がスタンダードに入り、モダンな実行環境ではポリフィルすら必要なく使えるケースが増えま…

もはや Promise がスタンダードに入り、モダンな実行環境ではポリフィルすら必要なく使えるケースが増えましたね。

かくいう自分も JSDeferred は使っておらず完全に Promise 依存に切替えております。外部ライブラリ依存なんてないほうがいい!!

JSDeferred と Promise の違い 機能的にはほぼ変わりがないので機械的に置き換えできますが、Promise は1度だけしか resolve できない点だけ違うので注意が必要。JSDeferred は値を保持しませんが、Promise は resolve した値を保持し、その後の then ではその値が返ってきます。 var resolver; var promise = new Promise(function (resolve, reject) { resolver = resolve; }); promise.then(function (r) { console.log(r); //=> foo }); resolver('foo'); promise.then(function (r) { console.log(r); //=> foo }); resolver('bar'); // nothing happened (invalid operation) JSDeferred は遅延された (Deferred) な処理を表現していますが、Promise は未来の値に関する約束を表現している点で違いがでます (Promise は値なので継続(手続)のように扱うことはできない)

基本 JSDeferred() のグローバルな next() を引数なし Promise.resolve() に置き換えます。あとの next() は全部 then() に置き換えます。 next( function ( ) { alert( 1 ); return next( function ( ) { alert( 2 ); }). next( function ( ) { alert( 3 ); }); }). next( function ( ) { alert( 4 ); }); これを Promise .resolve().then( function ( ) { alert( 1 ); return Promise .resolve().then( function ( ) { alert( 2 ); }). then( function ( ) { alert( 3 ); }); }). then( function ( ) { alert( 4 ); }); こうじゃ

parallel() は? Promise.all(list) を使う

earlier() は? Promise.race(list)