2017-03-01 1 views
0

プロミスの値を取得し、明示的に返さずにプロミスチェーンをプッシュすることを可能にする略記はありますか?中間アクションを実行し、ブルーバードで前回の結果を引き継ぐ

つまり

は、青い鳥に次の省略表現の構文があります:

.then(result => { callSomething(result); return result }) 
+1

を返さない場合は、それは問題ではないあなたはそれを返すために持っていますが、短いとインライン矢印機能と私は '.then(V =>のようなコンマ演算子を好みます(doSomething(v)、v)) '。 – Redu

答えて

1

あなたは、多くの場合、このパターンを使用しようとしている場合、なぜそれのための汎用的な方法を作る

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が約束

1

あなたは(中括弧なし)あなたの矢印機能の体内にComma operatorを使用することができます。

.then(result => (callSomething(result), result) 

コンマ演算子

は、それぞれのオペランドを(左から右に)評価し、最後のオペランド

ので、resultは、式によって返される:

(callSomething(result), result) 

その後、中括弧なしの矢印機能は、その本体として指定した式の値を返します。このため、resultが返されます。

+0

'onFulfilledコールとonRejectedコールバックの値を返すことで、チェーンの値を伝えることができます。あなたのステートメントは、' onFulfilled'が約束を返さなければならないことを意味します - 少なくともそれを推論する方法です。その推論だけで彼らはコールバックではなく約束を返す必要があります。もちろん、彼らは**約束を返すことができます。 –

+0

あなたは正しい@JaromandaXです。それは ''それで '*は*約束を返さなければなりません。単純な値を返すことができるコールバック。間違っていて、それほど関係がないので、私は答えからその部分を削除しました。ありがとうございました。 – Andrea

関連する問題