1

安全で、progress() にアクセスできるコード ブロックを Bluebird 内に作成したい - これは可能ですか:

私が望むことを行う1つの方法は、例外ハンドラーを使用することです-しかし、私はそれなしで解決策を探しています:

var deferred = Promise.defer();
try {
    ...
    deferred.progress(10);
    ...
} catch(e) {
    deferred.reject(e);
} 
return deferred.promise;

また、ドキュメントによると:

Promise.defer の使用はお勧めできません。 new Promise を使用するよりも扱いにくく、エラーが発生しやすくなります。

だから私はこれを行うことができます:

return new Promise((resolve, reject) => {
    ...
});

しかし、私はそれを進める方法がありませんか?

ありがとう、

4

3 に答える 3

5

Promise.method任意の関数を安全にするために使用できます

var fn = Promise.method(function() {

    var deferred = Promise.defer();
    deferred.progress(10);
    return deferred.promise;

});
于 2014-03-03T16:20:59.200 に答える
1

そうです、new Promiseコンストラクターは進行状況イベントを発生させる方法を提供しません。その理由はおそらく、提案されたメソッドのいずれもまだ承認されていないpromise 構築仕様に関する進行中の議論です。

PromiseResolver.progress()メソッドが何をするかを確認できます。プロミスで「プライベート」で文書化されていない._progress()メソッドを呼び出すだけで済みますが、それはお勧めできません。

于 2014-03-03T15:32:56.933 に答える
0

@エサイリヤ

ありがとう、ほとんど私が終わったもの....

return new Promise((resolve, reject) => {
    var deferred = Promise.defer();
    ....
    deferred.progress(10);
    ....
    resolve(deferred.promise);
});
于 2014-03-04T14:04:11.643 に答える