Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js函数调用顺序,Spotify Web API_Javascript_Node.js_Spotify App - Fatal编程技术网

Javascript node.js函数调用顺序,Spotify Web API

Javascript node.js函数调用顺序,Spotify Web API,javascript,node.js,spotify-app,Javascript,Node.js,Spotify App,我正在尝试将SpotifyWebAPI与node.js的包装一起使用。在执行任何API调用之前,我需要设置访问令牌。在我的脚本中,我首先调用setAccessToken函数,然后调用下面的一些API请求。但是,由于node.js的异步性质,在我的API请求之后调用了我的setAccessToken方法,这导致API请求失败。在调用下面的API请求之前,如何确保我的setAccessToken函数返回(API请求行以spotifyApi.getMySavedTrackscall开头) app.ge

我正在尝试将SpotifyWebAPI与node.js的包装一起使用。在执行任何API调用之前,我需要设置访问令牌。在我的脚本中,我首先调用
setAccessToken
函数,然后调用下面的一些API请求。但是,由于node.js的异步性质,在我的API请求之后调用了我的
setAccessToken
方法,这导致API请求失败。在调用下面的API请求之前,如何确保我的
setAccessToken
函数返回(API请求行以
spotifyApi.getMySavedTracks
call开头)

app.get('/callback',(req,res)=>{
var代码=req.query.code | | null;
如果(代码===null){
log(“代码为空”);
}
异步函数authorize(){
常量数据=等待spotifyApi.authorizationCodeGrant(代码);
//log('令牌在'+data.body['expires_in']中过期]);
//log('访问令牌是'+data.body['access_token']);
//log('刷新令牌为'+data.body['refresh_-token']);
//在API对象上设置访问令牌,以便在以后的调用中使用它
accesToken=data.body['access_token'];
refreshttoken=data.body['refresh_-token'];
spotifyApi.setAccessToken(accesToken);
spotifyApi.setRefreshToken(refreshToken);
}
试一试{
授权();
}捕捉(错误){
log('出了问题!',err);
}
spotifyApi.getMySavedTracks({
限制:lim,
偏移量:1
})
.then(功能(数据){
返回data.body.items;
},函数(err){
log('出了问题!',err);
})
.然后(功能(项目){
设ids=[];
items.forEach(功能(项目){
id.push(item.track.id);
})
返回spotifyApi.getAudioFeaturesForTracks(id);//2xc8WSkjAp4xRGV6I1Aktb
})
.then(功能(数据){
让歌曲=data.body.audio_功能;
//console.log(歌曲);
让filteredSongURIs=[];
songs.forEach(函数(歌曲){

如果((song.energy>=moodScore offset)&&(song.energy您可以将
setAccessToken
之后的所有代码包装到另一个
中,然后
,或者您可以
等待
承诺
结束:

//在此处添加'async'
app.get('/callback',async(req,res)=>{
var代码=req.query.code | | null;
如果(代码===null){
log(“代码为空”);
}
试一试{
常量数据=等待spotifyApi.authorizationCodeGrant(代码);
//log('令牌在'+data.body['expires_in']中过期]);
//log('访问令牌是'+data.body['access_token']);
//log('刷新令牌为'+data.body['refresh_-token']);
//在API对象上设置访问令牌,以便在以后的调用中使用它
accesToken=data.body['access_token'];
refreshttoken=data.body['refresh_-token'];
spotifyApi.setAccessToken(accesToken);
spotifyApi.setRefreshToken(refreshToken);
}捕捉(错误){
log('出了问题!',err);
}
//代码的其余部分

结果是
spotifyApi。authorizationCodeGrant
不是一个异步函数。因为我得到了“SyntaxError:await仅在异步函数中有效”@emit问题不在
spotifyApi.authorizationCodeGrant
中,而是在调用它的函数中,该函数需要声明为
async
,以便允许使用
wait
。我将所有代码放在异步函数中的try块中,并在try中调用了它。但是我得到了相同的结果issue@Khashhogi对不起,我不能取消接受最后的评论。相应地更新你的问题
app.get('/callback', (req, res) => {
  var code = req.query.code || null;
  if (code === null) {
      console.log("code is null");
  }

  async function authorize() {
    const data = await spotifyApi.authorizationCodeGrant(code);
    // console.log('The token expires in ' + data.body['expires_in']);
    // console.log('The access token is ' + data.body['access_token']);
    // console.log('The refresh token is ' + data.body['refresh_token']);
    // Set the access token on the API object to use it in later calls
    accesToken = data.body['access_token'];
    refreshToken = data.body['refresh_token'];
    spotifyApi.setAccessToken(accesToken);
    spotifyApi.setRefreshToken(refreshToken);
  }

  try {
    authorize();
  } catch (err) {
    console.log('Something went wrong!', err);
  }

  spotifyApi.getMySavedTracks({
    limit : lim,
    offset: 1
  })
  .then(function(data) {
    return data.body.items;
  }, function(err) {
    console.log('Something went wrong!', err);
  })
  .then(function(items) {
    let ids = [];
    items.forEach(function(item) {
      ids.push(item.track.id);
    })
    return spotifyApi.getAudioFeaturesForTracks(ids); //2xc8WSkjAp4xRGV6I1Aktb
  })
  .then(function(data) {
    let songs = data.body.audio_features;
    //console.log(songs);
    let filteredSongURIs = [];
    songs.forEach(function(song) {
      if ((song.energy >= moodScore-offset) && (song.energy <= moodScore+offset)) {
        filteredSongURIs.push(song.uri);
      }
    })

    //Create Playlist with filtered songs
    spotifyApi.createPlaylist('Mooder Playlist', { 'description': 'My description', 'public': true })
    .then(function(data) {
      return data.body.id;
    }, function(err) {
      console.log('Something went wrong!', err);
    })
    .then(function(playlist) {
      spotifyApi.addTracksToPlaylist(playlist, filteredSongURIs)
    })
    .then(function(data) {
      console.log('Added tracks to playlist!');
    }, function(err) {
      console.log('Something went wrong!', err);
    });
    
  }, function(err) {
    console.log(err);
  });


  res.redirect('/testAPI');
});