[javascript] Скопируйте объект, возвращенный из узла, и подайте его в следующий. Затем


Answers

Question

Я застрял в этой проблеме за то, что кажется вечностью. Я просто попадаю в узел и начинаю судить о обещаниях и т. Д.

То, что я пытаюсь сделать, это получить данные из Spotify API, и первое, что я делаю, это получить собственные плейлисты:

function getPlaylists(access_token) {

    var options = {
      url: 'https://api.spotify.com/v1/me/playlists',
      headers: { 'Authorization': 'Bearer ' + access_token },
      json: true
    };

    return new Promise(function(resolve, reject) {

      request.get(options, function(error, response, body) {
        var playlists = body.items;
        var playlistArray = [];
        playlists.forEach(function(playlist) {
          var name = playlist.name;
          var url = playlist.tracks.href;

          playlistArray.push(url);
        });

        if(!error) {
          resolve(playlistArray);
        } else {
          reject(error);
        }

    });

  });
}

Хорошо, пока все хорошо. Теперь я также хочу пригласить артистов из этих плейлистов:

function getArtists(url,access_token) {

  var params = {
    url: url,
    headers: { 'Authorization': 'Bearer ' + access_token },
    json: true
  };

  return new Promise(function(resolve, reject) {

    request.get(params, function(error, response, body) {

        var tracks = body.items;
        var artistArray = [];
        tracks.forEach(function(artists) {
          let allArtists = artists.track.artists;
          allArtists.forEach(function(artist) {
              artistArray.push(artist);
          });
        })

        if(!error) {
          resolve(artistArray);
        } else {
          reject(error);
        }

    });

  })

}

Как я возвращаю все эти данные:

getPlaylists(access_token)
     .then(function(playlists) {

       playlists.forEach(function(playlist) {
          getArtists(playlist,access_token)
               .then(function(artist) {
                    return artist;
               });
     });


     }).then(function(artists) {
        console.log("getting artists",artists);
     }).catch(function(error) {
        console.log(error);
})

Однако это возвращает undefined. Я могу только заставить его работать, если я передам один URL-адрес списка воспроизведения функции getArtists - проблема в том, что цикл forEach я не знаю, как обращаться.

Любая помощь очень ценится!




Links