承诺系列
Promises in series
我有问题 运行 多个前提串联,使用 Q 和 reduce 习语(参见:http://taoofcode.net/promise-anti-patterns/)
我试着按照这个例子,稍微改变一下,这就是我得到的:
playlist.createPlaylist('playlist')
.then(function(playlistId) {
songsInfo.reduce(function (accumulatedPremise, songInfo) {
accumulatedPremise.then(function (response) {
var def = Q.defer();
youtube.search(songInfo, function (songInfo, resp) {
var song = songParser.parse(songInfo, resp);
if (song !== null) {
playlist.addSongToPlaylist(song, playlistId).then(function(response) {
def.resolve(response)
})
}
});
return def.promise;
})}, Q());
});
现在,我应该谈谈这背后的主要思想:
1) 我正在创建一个 youtube 播放列表。从 createPlaylist 函数,我返回一个带有播放列表 ID 的承诺,然后
2) 对于我拥有的每个 SongInfo,我需要在我的 youtube 模块上调用搜索方法。搜索功能也接受回调。在这种情况下,如果所需歌曲 found/parsed 正确,我将调用 addSongToPlaylistMethod。如您所见,addSongToPlaylist 也是 returns 一个 Promise。
现在,问题是:
内的所有方块
then
方法,调用于
accumulatedPremise
只执行一次。
您可能会问我为什么在这种情况下不使用 forEach?嗯,因为
http://www.acnenomor.com/3037813p1/playlistitems-batch-insert-youtube-api-v3
你能帮我修一下吗?
干杯,
斯拉维克
您没有从 reduce 函数返回任何内容。
accumulatedPremise.then(function (response) {
应该是:
return accumulatedPremise.then(function (response) {
我有问题 运行 多个前提串联,使用 Q 和 reduce 习语(参见:http://taoofcode.net/promise-anti-patterns/)
我试着按照这个例子,稍微改变一下,这就是我得到的:
playlist.createPlaylist('playlist')
.then(function(playlistId) {
songsInfo.reduce(function (accumulatedPremise, songInfo) {
accumulatedPremise.then(function (response) {
var def = Q.defer();
youtube.search(songInfo, function (songInfo, resp) {
var song = songParser.parse(songInfo, resp);
if (song !== null) {
playlist.addSongToPlaylist(song, playlistId).then(function(response) {
def.resolve(response)
})
}
});
return def.promise;
})}, Q());
});
现在,我应该谈谈这背后的主要思想:
1) 我正在创建一个 youtube 播放列表。从 createPlaylist 函数,我返回一个带有播放列表 ID 的承诺,然后
2) 对于我拥有的每个 SongInfo,我需要在我的 youtube 模块上调用搜索方法。搜索功能也接受回调。在这种情况下,如果所需歌曲 found/parsed 正确,我将调用 addSongToPlaylistMethod。如您所见,addSongToPlaylist 也是 returns 一个 Promise。
现在,问题是:
内的所有方块then
方法,调用于
accumulatedPremise
只执行一次。
您可能会问我为什么在这种情况下不使用 forEach?嗯,因为 http://www.acnenomor.com/3037813p1/playlistitems-batch-insert-youtube-api-v3
你能帮我修一下吗?
干杯, 斯拉维克
您没有从 reduce 函数返回任何内容。
accumulatedPremise.then(function (response) {
应该是:
return accumulatedPremise.then(function (response) {