欢迎来到我的第一个 SO 问题。我正在尝试从 Express 后端调用 Spotify 的 API,但无法正确返回数据。 API 请求不是问题 - 返回了正确的信息,我似乎无法检索该信息。
这是调用包含 API 调用的 getOldTracks
函数的路由。
router.post("/remix", async (req, res) => {
// Fetch song information
const oldTracks = await getOldTracks(req.body.playlistId, req.user.username).then((data) => {
console.log('returned to original call',data);
return data;
}).catch((err) => {console.log('this is an error',err)});
});
我最初尝试直接返回 setUpSpotifyApi
函数,但它只会返回一个挂起的承诺,该承诺将解析为未定义。我正在尝试使用 trackList
来查看调用的顺序。
const getOldTracks = async (playlistId, userName) => {
let trackList = null;
await setUpSpotifyApi(userName)
.then((spotifyApi) => {
spotifyApi.getPlaylist(playlistId).then(
(data) => {
console.log('in spotify api call',data.body.tracks.items)
trackList = data.body.tracks.items;
// return data.body.tracks.items;
},
(err) => {
console.log("Error grabbing playlist", err);
}
);
})
.catch((error) => {
console.log(error);
});
console.log('after await',trackList);
return trackList
};
这是控制台显示的内容。这是一个没有曲目的播放列表,所以空数组是正确的
after await null
returned to original call null
in spotify api call []
我真的不明白为什么 getOldTracks
返回空值 trackList
。为什么在我指定等待 Spotify 调用后它会继续执行?我对异步 JS 不太有经验,但我从来没有遇到过这样的问题。我也无法用承诺解决这个问题,所以我不知道为什么它以错误的顺序执行。
答案 0 :(得分:0)
你必须export const getTags = (element: Record < string, any > ) => Object.entries(element).reduce((acc, [key, val]) => {
if (typeof key === "boolean") {
acc[key] = val;
}
return acc;
}, {});
内在的承诺,现在你在await
完成之前返回
spotifyApi.getPlaylist