2017-01-24 14 views
5

設定したプロミスチェーンを通じてパラメータを渡す際に問題が発生します。ここに私がしようとしているものの基本的な例があります。これらの約束は、より多くの情報は私が5を渡していることの終わりまでに、チェーンに追加され続けるように私は、約束のチェーンを介して複数のパラメータを渡すことができますどのようにパラメータ、ユーザが定義されていない第二約束では、プロミスチェーンへのパラメータの受け渡し

var dummyReq = { client: null }; 
var dummyUser = { email: '[email protected]', password: 'admin' }; 

function printEmail(request, user) { 
    return new Promise((resolve, reject) => { 
     console.log('Email:', user.email); 
     return resolve(request, user); 
    }); 
} 

function printPassword(request, user) { 
    return new Promise((resolve, reject) => { 
     console.log('Password:', user.password); // <-- user is undefined 
     return resolve(request, user); 
    }); 
} 

printEmail(dummyReq, dummyUser) 
    .then(printPassword) 
    .catch(function(error) { 
    console.log('Unexepected error has occured'); 
}); 

最終的な約束までの価値観。

ES6演算子を使用してオブジェクトに結合し、呼び出すたびにそれらを分解する必要がありますか?たとえばreturn resolve({request, user})、次にconst { request, user } = param

+0

はい、正しくあり、 'resolve'と' reject'は1つのパラメータを受け取るべきです。 –

+1

単に '.then(request => printPassword(request、dummyUser))'を使うことはできませんか? – Phil

+0

値で同期的に解決しているときには、約束を使用しないでください。 – Bergi

答えて

6

あなたは正しい方向にあります。プロミスオブジェクトは、充足されたリアクションハンドラに渡される単一の満たされた値を保持します。約束していない価値、または約束の成就価値が最終的に達成されたとき、約束の連鎖で次の約束を果たすために使用されます。次の約束ハンドラに複数の値を伝播したい場合は、そのために単一のオブジェクト値を使用する必要があります。

したがって、printEmailprintPasswordは実際には同期操作ではなく非同期操作を行うとします。

printEmailは次のようになります。

function printEmail(request, user) { 
    return new Promise((resolve, reject) => { 
     console.log('Email:', user.email); 
     resolve({request, user}); 
    }); 
} 

新しい約束のエグゼキュータ内の文を「返す」なし - executor機能の 戻り値は使用されず、一般的にundefinedになります。

printPasswordあなたは変数にデータオブジェクトを解体かどうかは

function printPassword(data) { 
    return new Promise((resolve, reject) => { 
     console.log('Password:', data.user.password); 
     resolve(data); 
    }); 
}} 

が文体ではなく、技術的な問題であるとなります。同様に、一連の約束事で複数のハンドラに同じオブジェクトを渡しても、必要に応じてプロパティを削除または追加したり、後続のステップで必要なプロパティのみを持つ新しいオブジェクトを作成したりすることは、選択とスタイルの問題です。

+0

これは私がやったことです、ありがとう。 – Hobbyist

関連する問題