2017-03-02 5 views
1

Promise.allで約束を返そうとしていますが、何らかの理由でmy .thenの値が未定義と評価されています。これはすべてのインラインで動作するようだが、それは私がトップpromise.allを返すことができる必要があります私の理解だったし、他の約束のようにそれを扱う。Promise.allを関数から返す

function createStreamerArray() { 
    const regularStreamers = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"] 
    const baseURL = 'https://wind-bow.gomix.me/twitch-api' 

    return Promise.all(
    regularStreamers.map(streamer => { 
     Promise.all([ 
     Promise.resolve($.getJSON(baseURL + '/users/' + streamer + '?callback=?', null)), 
     Promise.resolve($.getJSON(baseURL + '/streams/' + streamer + '?callback=?', null)) 
     ]).then(values => { 
     return values 
     }) 
    }) 
) 
} 

createStreamerArray().then(values => console.log(values)) 
+1

の作品は、 '.then(値=> { 戻り値を削除することができます }) ' - しかし、これは問題を修正することはありませんが、コードはあまり間違っていません:) –

+3

" inner "' Promise.all( '' - 内部の 'Promise.all'をラップする' {} 'を削除してください。 –

+0

[無意味な' .then(values => { の戻り値 })を削除してください。]](http://stackoverflow.com/q/ 41089122/1048572) – Bergi

答えて

1

まず(そして最も重要な)あなたは、このように、これはどちらかの矢印の機能のための短い形式を使用して、この

regularStreamers.map(streamer => { 
    // added return 
    return Promise.all([ 
    Promise.resolve($.getJSON(baseURL + '/users/' + streamer + '?callback=?', null)), 
    Promise.resolve($.getJSON(baseURL + '/streams/' + streamer + '?callback=?', null)) 
    ]) 
}) 

あるいは、同様に行うことができます.mapコールバック

に値を返す必要があります

//        { removed 
regularStreamers.map(streamer => 
    Promise.all([ 
    Promise.resolve($.getJSON(baseURL + '/users/' + streamer + '?callback=?', null)), 
    Promise.resolve($.getJSON(baseURL + '/streams/' + streamer + '?callback=?', null)) 
    ]) 
) 
// } removed 

第二に、冗長

を削除し(純粋に不要なコードを除去するために)
.then(values => { 
    return values 
}) 

これは、その結果:あなたが表示されます

function createStreamerArray() { 
 
     const regularStreamers = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"]; 
 
     const baseURL = 'https://wind-bow.gomix.me/twitch-api'; 
 
     
 
     return Promise.all(regularStreamers.map(streamer => Promise.all([ 
 
       Promise.resolve($.getJSON(baseURL + '/users/' + streamer + '?callback=?', null)), 
 
       Promise.resolve($.getJSON(baseURL + '/streams/' + streamer + '?callback=?', null)) 
 
     ]))); 
 
    }; 
 
    createStreamerArray().then(values => console.log(values));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

は、スタートのため

+0

素晴らしいですが、その冗長なコードがプレースホルダとしてそこにありました。私は実際に値を返すことを望んでいません。私はそれらを別のオブジェクトに結合して返したいと思いますが、最初は残りの部分を取得しようとしていました。 –

0

マップ関数内に余分な戻り値を追加しようとしましたか? 2番目のPromise.allを返さないと、あなたはあなたの値を見ることができません。