プロミスの値を取得し、明示的に返さずにプロミスチェーンをプッシュすることを可能にする略記はありますか?中間アクションを実行し、ブルーバードで前回の結果を引き継ぐ
つまりは、青い鳥に次の省略表現の構文があります:
.then(result => { callSomething(result); return result })
プロミスの値を取得し、明示的に返さずにプロミスチェーンをプッシュすることを可能にする略記はありますか?中間アクションを実行し、ブルーバードで前回の結果を引き継ぐ
つまりは、青い鳥に次の省略表現の構文があります:
.then(result => { callSomething(result); return result })
あなたは、多くの場合、このパターンを使用しようとしている場合、なぜそれのための汎用的な方法を作る
Promise.prototype.skip = function skip(fn, onRejected) {
return this.then(value => Promise.resolve(fn(value)).then(() => value), onRejected);
};
のはあなたの例を言ってみましょうcallSomething
代わりに、skip
を使用してB、約束今
function callSomething(v) {
console.log('skip got', v);
// this promise will be waited for, but the value will be ignored
return new Promise(resolve => setTimeout(resolve, 2000, 'wilma'));
}
を返します。 then
の場合、到着した達成値は、この場合はfred
となり、then
を単に通過しますが、callSomething
が返す約束が完了した後
Promise.resolve('fred').skip(callSomething).then(console.log); // outputs "fred"
callsomething
が約束
あなたは(中括弧なし)あなたの矢印機能の体内にComma operatorを使用することができます。
.then(result => (callSomething(result), result)
コンマ演算子
は、それぞれのオペランドを(左から右に)評価し、最後のオペランド
ので、result
は、式によって返される:
(callSomething(result), result)
その後、中括弧なしの矢印機能は、その本体として指定した式の値を返します。このため、result
が返されます。
'onFulfilledコールとonRejectedコールバックの値を返すことで、チェーンの値を伝えることができます。あなたのステートメントは、' onFulfilled'が約束を返さなければならないことを意味します - 少なくともそれを推論する方法です。その推論だけで彼らはコールバックではなく約束を返す必要があります。もちろん、彼らは**約束を返すことができます。 –
あなたは正しい@JaromandaXです。それは ''それで '*は*約束を返さなければなりません。単純な値を返すことができるコールバック。間違っていて、それほど関係がないので、私は答えからその部分を削除しました。ありがとうございました。 – Andrea
を返さない場合は、それは問題ではないあなたはそれを返すために持っていますが、短いとインライン矢印機能と私は '.then(V =>のようなコンマ演算子を好みます(doSomething(v)、v)) '。 – Redu