【发布时间】:2019-12-03 20:30:47
【问题描述】:
我认为我从根本上误解了 Promises 在 Node 中的工作原理。
我正在编写一个非常小的 Express 应用程序,我想返回包含某个关键字的所有 Spotify 播放列表的 JSON。我正在使用来自 npm 的spotify-web-api-node。
Spotify 的 API 限制每个请求 50 个播放列表。我有(我认为的)一个解决方案:只需增加偏移值,直到不再需要为止。
我的函数看起来像这样(playlists 在路由函数上方声明):
app.get('/playlists', function(req, res) {
addPlaylistsToList()
.then((data) => res.json(data))
});
function addPlaylistsToList(offset) {
if (!offset) { offset = 0; }
var limit = 50;
return new Promise((resolve, reject) => {
spotifyApi.getUserPlaylists(config.USER, { limit: limit, offset: offset })
.then(function(data) {
playlists.push(data.body.items.filter((playlist) => playlist.name.includes(config.TITLE_CONDITION)));
if (data.body.items.length == limit) {
addPlaylistsToList(offset + limit);
} else {
let result = [...new Set(playlists)];
resolve(result);
}
})
});
}
我不能在这里打电话给resolve吗?我的意思是,我知道我不能,因为我陷入了无限循环。是否有“最佳实践”:递归承诺?我是不是在滥用then?
【问题讨论】:
-
您是否收到任何类型的错误,或者它无法正常工作
-
问题在下方得到解决,但在其损坏状态(上方),程序在收到请求时挂起。