2016-03-21 15 views
2

この動機付けは、初期同期コードで起きたものであっても、末尾が.catchである可能性のあるすべてのエラーを捕捉できるようにすることです。エラーを処理する途中でjavascriptを約束するブルーバードチェーン

私はそうのように私の約束チェーンを開始したい:

const bbPromise = require('bluebird'); 
bbPromise.do(() => { 
    someTask(); // Could throw 
    return someVar.doSomeOtherTaskAsync(); 
}) 
.then((result) => { 
    // Do something with result 
}) 
.catch((err) => { 
    console.log('err: ', err); 
}); 

bbPromise.do機能と同じように動作機能はありますか? bbPromise.resolveは、渡された、実行されなかったラムダ関数全体を私に渡します。

bbPromise.bind({}).then(() => { 
    someTask(); // Could throw 
    return someVar.doSomeOtherTaskAsync(); 
}) 
... 

かさえ:

new bbPromise((resolve, reject) => { 
    someTask(); // Could throw 
    return someVar.doSomeOtherTaskAsync().then(resolve).catch(reject); 
}) 
... 

をしかし、これらは少し間接的です

は、私はこのような何かを行うことができます知っています。 promiseを返すことができる関数を実行するだけで、約束のチェーンを開始する良い方法はありますか?末尾にキャッチされたエラーがあります.catch

答えて

5

あなたはPromise.tryを探しているようですね。 Promise.resolveは、値をすでに持っていてそれからプロミスチェーンを構築したい場合に適していますが、スローする可能性のあるコードを実行する場合は、代わりにPromise.tryを使用してください。

trythenと同じように同じ方法で任意同期例外を扱う機能を取得し、実行します。あなたは次のようなものになります:

bbPromise.try(someTask).then(() => { 
    return someVar.doSomeOtherTaskAsync(); 
}).then((result) => { 
    // Do something with result 
}).catch((err) => { 
    console.log('err: ', err); 
}); 
関連する問題