2016-06-26 12 views
0

他の非同期要求に依存する約束を返すことを望みます。これは私が思いついた最高です:約束を返す

return Promise.all([user, name, fbprofile, phone]) 
    .then((results) => { 
    return results[0].addUserAttributes([results[1], results[2], results[3]]) 
     .then((response) => response); 
    }); 

これは3つのネストされた戻り値であり、すべての変数は配列にパックされています。これは、私の意見では、コードを理解しづらいものにしています。

ネスト機能なしで同じ結果を達成する方法はありますか?

答えて

3

「良い」方法はありませんが、解体のビットは少し明確です。また、最後のthenは役に立たない。

return Promise.all([user, name, fbprofile, phone]) 
    .then(([userResult, ...otherResults]) => 
     userResult.addUserAttributes(otherResults) 
    }); 
+0

しかし、addUserAttributesもお約束ですが、私はまだそれを必要としませんか? – Himmators

+0

あなたはそれが約束を返すことを意味しますか?もしそうなら、約束は連鎖可能です。現在の関数は、 'Promise.all'と' userResult.addUserAttributes(...) '約束が成就した後に約束を返します。 –

+0

わかりません、私は理解しています、あなたは私にどのように表示できますか?ノード6でサポートされている – Himmators

1

私はこのecma6を作る方法を知らないが、あなただけの次の手順を実行することができるはずです。

//function to call once all are resolved. 
function afterAllResolved(results){ 
    return results[0] 
       .addUserAttributes(
        [results[1], 
        results[2],  
        results[3]) 
} 

return Promise 
     .all([user, name, fbprofile, phone]) 
     .then(afterAllResolved); 

これはあなたの関数を呼び出して、解決としてresults[0].addからの結果を返します。項目。

+0

addUserAttributesも約束ですが、私はまだ最後のコールバックは必要ありませんか? – Himmators

+1

あなたが '約束 'を返す' then'を返すと、チェーンは解決を待つでしょう。 'addUserAttributes'呼び出しから結果を返すことを前提として、最後のコールバックは必要ありません。 – Nix