2015-10-02 15 views
14

私たちはECMAScript 6 promisesを使用しています。進捗状況通知ECMAScript約束

エンドユーザに進捗通知を実装する必要があります(これは、純粋なUX要件です)。私は、他の約束のフレームワーク(Q promiseライブラリ、ex。)が可能であることを知っています。

私たちは何らかの進捗表示を最もエレガントに受け入れることができます

を別のフレームワークに移行する必要がありますか? (私は後者の努力を見積もる方法を知らない)

答えて

14

ES2015約束は進展することはありません。約束は唯一の最終的価値を表します。複数の値が必要な場合は、オブザーバブルを調べることができます。

関数を返す約束を進めることは非常に簡単です。基本的には、関数のパラメータとしてコールバックをとり、進行通知が発生するたびにコールバックします。ここで

bluebirdで私達のガイドから適応し、いくつかのテキストです:

進行は約束の進行ハンドラを使用するAPIと構成可能性と連鎖する問題があります。実際に約束とは関係がないので、他の図書館が進行APIから離れるにつれ、Bluebirdもそうなるでしょう。プログレスバーの一般的な使用例を実装するには、C#のIProgressに似たパターンを使用します。

Promise.resolve($.get(...).progress(function() { 
     // ... 
    })) 
    .then(function() { 
     // ... 
    }) 
    .catch(function(e) { 
     // ... 
    }) 

は、C#のように一般的な進行状況インターフェイスを実装:のjQueryを使用

Promise.resolve($.get(...)) 
    .progressed(function() { 
     // ... 
    }) 
    .then(function() { 
     // ... 
    }) 
    .catch(function(e) { 
     // ... 
    }) 

後:前のjQueryを使用

function returnsPromiseWithProgress(progressHandler) { 
    return doFirstAction().tap(function() { 
     progressHandler(0.33); 
    }).then(doSecondAction).tap(function() { 
     progressHandler(0.66); 
    }).then(doThirdAction).tap(function() { 
     progressHandler(1.00); 
    }); 
} 

returnsPromiseWithProgress(function(progress) { 
    ui.progressbar.setWidth((progress * 200) + "px"); // update with on client side 
}).then(function(value) { // action complete 
    // entire chain is complete. 
}).catch(function(e) { 
    // error 
}); 
関連する問題