2016-04-06 15 views
4

入力を呼び出してオブジェクトの配列に文字列の配列を変換します入力。これらのJSオブジェクトのプロパティは、各ユーザー名の2つのAPI呼び出しから構築されます(私は$.getJSON呼び出しを使用しています。私は、各オブジェクトがどのように見えるところ

let userObjects = [ {...}, {...}, {...}, ... ] 

のようにオブジェクトの配列を作成するためにArray.prototype.map()高階関数を使用したい

let users = ["OgamingSC2", "storbeck", "comster404"] // actual list is longer 

私は単収縮のAPIのためのユーザ名の配列を持っています:

{ 
username: 'storbeck' // <-- Added by me 
stream: null,   // <-- Added by first API call 
_links: {    // <-- Added by first API call 
    self:'https://api.twitch.tv/kraken/streams/storbeck', 
    channel:'https://api.twitch.tv/kraken/channels/storbeck' 
} 
logo: 'http:// ... png' // <-- Added by second API call 
} 

これらは、2つのAPIコール関数です。私は、今、私はuserObjectsの内容をプリントアウトするとき

let userObjects = users.map((user)=>{ 
    return getStreamInfo(user) 
    .done((data) => { 
     let result = { 
     username: user, 
     data: data 
     } 
     console.log(JSON.stringify(result)) // prints out the intended object so far 
     return result 
    }) 
}) 

:私は何を意図したオブジェクトが得られていない私のコードで、これまで持っていることである

let getStreamInfo = (username) => { 
    return $.getJSON('https://api.twitch.tv/kraken/streams/'+username+'?callback=?') 
    .then((x) => x) // should I include this then? 
} 

let getUserInfo = (twitchObject) => { 
    return $.getJSON('https://api.twitch.tv/kraken/users/'+ twitchObject.user) 
} 

$.getJSON約束をETURN取得:

"{}" 
"{}" 
"{}" 
// ... and so on 

はさらに行く、私はチェーンuserObjectsに好きで、私はgetUserInfoに入るものは何でもから各JSオブジェクトにさらに追加したいです 関数。

これは機能的なJavascriptでどのように行うことができますか?これは必須ではありません。

+0

あなたの 'users.mapから' promise'を返します((ユーザー)) 'の呼び出しではなく、オブジェクトの結果です:

let getStreamInfo = (username) => { return $.getJSON('https://api.twitch.tv/kraken/streams/'+username+'?callback=?'); } let getUserInfo = (user) => { return $.getJSON('https://api.twitch.tv/kraken/users/'+ user); } let userObjects = []; 

コア機能ではなく、約束の同期を必要とします(後の)対応するajax呼び出し。最初に配列からオブジェクトへの標準/基本 'map'を行い、*オブジェクトを生成するためにそれらをpromises/ajax呼び出しに' foreach'します。 –

答えて

0

あなたは正しい方法で、あなたの機能を少し編集するだけで済みます。

users.map((user)=>{ 

    Promise.all(getStreamInfo(user), getUserInfo(user)).then((data)=>{ 
    let obj = { 
     username: user, 
     stream: data[0].stream, 
     _links: data[0]._links, 
     logo: data[1].logo 
    } 
    userObjects.push(obj); 
    }); 
}); 
関連する問題