Eingang: eine Anordnung von Benutzernamen strings
benötigt Ausgang: ein Array von JavaScript-Objekte, die jedem Benutzernamen in die entsprechen Eingang. Die Eigenschaften für diese JS-Objekte müssen aus zwei API-Aufrufen für jeden Benutzernamen bestehen (Ich verwende $.getJSON
Aufrufe. Vorschläge willkommen).
Ich habe ein Array von Benutzernamen für die Twitch API:
let users = ["OgamingSC2", "storbeck", "comster404"] // actual list is longer
Ich möchte die Array.prototype.map() Funktion höherer Ordnung verwenden, um ein Array von Objekten wie
let userObjects = [ {...}, {...}, {...}, ... ]
zu schaffen, in dem jedes Objekt aussieht :
{
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
}
Dies sind die zwei API-Aufruffunktionen, die r eturn die $.getJSON
Versprechungen:
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)
}
Was ich in meinem Code so weit haben, die in den beabsichtigten Ziele nicht ist resultierende:
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
})
})
Nun, wenn ich den Inhalt userObjects
ausdrucken, I erhalten:
"{}"
"{}"
"{}"
// ... and so on
weiter gehen, ich Kette möchte userObjects
und mehr in jedem JS-Objekt aus, was auch immer ich in der getUserInfo
bekommen Funktion.
Ich möchte gehen, wie dies mit funktionalem Javascript getan werden kann, aber das ist nicht notwendig.
Sie eine 'promise' von Ihrem' users.map Rückkehr ((Benutzer)) 'Ruf, nicht das Objekt, das das Ergebnis ist von der (später) entsprechende Ajax-Ruf. Führen Sie zuerst eine Standard/Basis-Map aus dem Array zu den Objekten aus, dann führen Sie sie in Verspre- chen/Ajax-Aufrufe aus, um das Objekt zu füllen. –