Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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
Reactjs 返回空json,即使它是';它不是空的_Reactjs_Express_Sequelize.js - Fatal编程技术网

Reactjs 返回空json,即使它是';它不是空的

Reactjs 返回空json,即使它是';它不是空的,reactjs,express,sequelize.js,Reactjs,Express,Sequelize.js,我试图将一个json返回给我的react客户端,其中包含一个歌曲(对象)列表。但它返回一个空数组作为json。这就是我检索数据的方式 let songs = []; fetch("https://api.spotify.com/v1/me/tracks", { method: "GET", headers: { Authorization: "Bearer " + req.user.accessToken }, json: true })

我试图将一个json返回给我的react客户端,其中包含一个歌曲(对象)列表。但它返回一个空数组作为json。这就是我检索数据的方式

let songs = [];
  fetch("https://api.spotify.com/v1/me/tracks", {
    method: "GET",
    headers: {
      Authorization: "Bearer " + req.user.accessToken
    },
    json: true
  })
    .then(res => res.json())
    .then(apiResponse => {
      let limit = apiResponse.limit;
      for (let i = 0; i < limit; i++) {
        Song.findOrCreate({
          where: {
            name: apiResponse.items[i].track.name,
            song_spotify_id: apiResponse.items[i].track.id,
            album: apiResponse.items[i].track.album.name,
            popularity: apiResponse.items[i].track.popularity,
            track_number: apiResponse.items[i].track.track_number,
            uri: apiResponse.items[i].track.uri
          }
        }).then(song => {
          songs.push(song);
        });
      }
    })
    .catch(function(error) {
      return {
        type: "ERROR ON FETCH",
        api_response: { success: false }
      };
    });

  console.log("songs: *********************" + songs);
  res.status(200).json(songs);
});
奇怪的是,我有两个版本。其中一个版本就是这个版本,它只要求SpotifyAPI提供20首歌曲。我的另一个版本几乎完全相同,只是它循环并请求整个歌曲列表(获取50首、保存50首、请求spotify再获取50首,等等),而另一个版本可以工作。代码完全相同,但问题是加载需要很长时间,所以我试图简化它,但它不起作用


我感谢您提供的任何帮助。

这是因为您必须等待所有承诺,然后才能发送回复

实际上,您发送了响应,但数据库中的查询过程尚未运行

let songs = [];
  fetch("https://api.spotify.com/v1/me/tracks", {
    method: "GET",
    headers: {
      Authorization: "Bearer " + req.user.accessToken
    },
    json: true
  })
    .then(results => results.json())
    .then(apiResponse => {
      let limit = apiResponse.limit;
      let promises = [];

      for (let i = 0; i < limit; i++) {
        const myPromise = new Promise((resolve, reject) => {
        Song.findOrCreate({
          where: {
            name: apiResponse.items[i].track.name,
            song_spotify_id: apiResponse.items[i].track.id,
            album: apiResponse.items[i].track.album.name,
            popularity: apiResponse.items[i].track.popularity,
            track_number: apiResponse.items[i].track.track_number,
            uri: apiResponse.items[i].track.uri
          }
        }).then(song => {
          songs.push(song);
          resolve(true)
        });
        });

        promises.push(myPromise);
      }

      Promise.all(promises)
      .then(() => {
          console.log("songs: *********************" + songs);
          res.status(200).json(songs);
      });

    })
    .catch(function(error) {
      return {
        type: "ERROR ON FETCH",
        api_response: { success: false }
      };
    });

});
let songs=[];
取回(“https://api.spotify.com/v1/me/tracks", {
方法:“获取”,
标题:{
授权:“承载人”+req.user.accessToken
},
json:true
})
.then(results=>results.json())
。然后(apiResponse=>{
let limit=apiResponse.limit;
让承诺=[];
for(设i=0;i{
Song.findOrCreate({
其中:{
名称:apiResponse.items[i].track.name,
song_spotify_id:apiResponse.items[i].track.id,
唱片集:apiResponse.items[i].track.album.name,
流行度:apiResponse.items[i].track.popularity,
轨道号:apiResponse.items[i]。轨道号,
uri:apiResponse.items[i].track.uri
}
}).然后(歌曲=>{
歌曲。推(歌曲);
解析(真)
});
});
承诺。推动(我的承诺);
}
所有(承诺)
.然后(()=>{
console.log(“歌曲:****************”+歌曲);
res.status(200).json(歌曲);
});
})
.catch(函数(错误){
返回{
类型:“获取时出错”,
api_响应:{成功:错误}
};
});
});
[]
let songs = [];
  fetch("https://api.spotify.com/v1/me/tracks", {
    method: "GET",
    headers: {
      Authorization: "Bearer " + req.user.accessToken
    },
    json: true
  })
    .then(results => results.json())
    .then(apiResponse => {
      let limit = apiResponse.limit;
      let promises = [];

      for (let i = 0; i < limit; i++) {
        const myPromise = new Promise((resolve, reject) => {
        Song.findOrCreate({
          where: {
            name: apiResponse.items[i].track.name,
            song_spotify_id: apiResponse.items[i].track.id,
            album: apiResponse.items[i].track.album.name,
            popularity: apiResponse.items[i].track.popularity,
            track_number: apiResponse.items[i].track.track_number,
            uri: apiResponse.items[i].track.uri
          }
        }).then(song => {
          songs.push(song);
          resolve(true)
        });
        });

        promises.push(myPromise);
      }

      Promise.all(promises)
      .then(() => {
          console.log("songs: *********************" + songs);
          res.status(200).json(songs);
      });

    })
    .catch(function(error) {
      return {
        type: "ERROR ON FETCH",
        api_response: { success: false }
      };
    });

});