私は約束を呼び出す関数を持っています。成功または失敗の場合、私は約束を返す以上のデータを返したいと思います。try/catchの約束事を適切な方法でブロックしていますか?
私は、これはうまくいくかもしれないと思った:
function foo() {
const extra = 'bar'
return thepromise().then((res) => {
return {
result: res,
data: extra
}
}, (err) => {
// this will not happen if an error is thrown in the called promise
return {
result: res,
data: extra
}
})
}
foo().then((res) => { }, (err) => { // error result ends up here })
しかし、これは動作しません。 thepromise
にエラーがスローされた場合、catchブロックは呼び出されず、代わりにfoo()
のcatchブロックが呼び出されます。
これを処理する適切な方法は何ですか?私は、try/catchブロックで成功していますが、私はこれが最善のアプローチであることを確認していない:例外またはエラーの任意の並べ替えを投げるべきではない約束を返すように設計された機能
function foo() {
const extra = 'bar'
return new Promise((resolve, reject) => {
try {
return thepromise(p)
} catch (e) {
reject(e)
}
})
.then(function(res) {
return {
result: res,
data: extra,
status: 'success'
}
}, function(err) {
return {
result: err,
data: extra
status: 'error'
}
})
}
あなたの最初の例が私のために働きます(変数名まで - 最初のハンドラには存在しない "res"変数を参照しています。これは "err" 、 "res"ではない)。どのようなエラーが表示されますか? –
'thepromise'はエラーを投げてはいけません。そうであれば、約束を正しく使用しておらず、拒否された約束を返すように書き直さなければならない。 – zzzzBov