javascript-循环从节点promise返回的对象,并馈送到下一个.then
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-循环从节点promise返回的对象,并馈送到下一个.then,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2175字,纯文字阅读大概需要4分钟。
内容图文
![javascript-循环从节点promise返回的对象,并馈送到下一个.then](/upload/InfoBanner/zyjiaocheng/684/b8fc6e983cda4539a336529bfd7fc825.jpg)
我一直被这个问题困扰着,似乎是永恒的.
我只是进入节点,开始了解诺言等.
我想做的是从Spotify API中获取数据,我要做的第一件事就是获取自己的播放列表:
function getPlaylists(access_token) {
var options = {
url: 'https://api.spotify.com/v1/me/playlists',
headers: { 'Authorization': 'Bearer ' + access_token },
json: true
};
return new Promise(function(resolve, reject) {
request.get(options, function(error, response, body) {
var playlists = body.items;
var playlistArray = [];
playlists.forEach(function(playlist) {
var name = playlist.name;
var url = playlist.tracks.href;
playlistArray.push(url);
});
if(!error) {
resolve(playlistArray);
} else {
reject(error);
}
});
});
}
好的,到目前为止很好.现在,我还想从这些播放列表中获取艺术家:
function getArtists(url,access_token) {
var params = {
url: url,
headers: { 'Authorization': 'Bearer ' + access_token },
json: true
};
return new Promise(function(resolve, reject) {
request.get(params, function(error, response, body) {
var tracks = body.items;
var artistArray = [];
tracks.forEach(function(artists) {
let allArtists = artists.track.artists;
allArtists.forEach(function(artist) {
artistArray.push(artist);
});
})
if(!error) {
resolve(artistArray);
} else {
reject(error);
}
});
})
}
我返回所有这些数据的方式是:
getPlaylists(access_token)
.then(function(playlists) {
playlists.forEach(function(playlist) {
getArtists(playlist,access_token)
.then(function(artist) {
return artist;
});
});
}).then(function(artists) {
console.log("getting artists",artists);
}).catch(function(error) {
console.log(error);
})
但是,这返回未定义.只有将单个播放列表网址传递给getArtists函数,我才能使其工作-问题是forEach循环,我不知道该如何处理.
任何帮助是极大的赞赏!
解决方法:
您可以结合使用[] .map()和Promise.all()来创建一个Promise,它等待一系列动作的完成:
getPlaylists(access_token)
.then(playlists => Promise.all(playlists.map(playlist =>
getArtists(playlist, access_token)))
.then(artists => {
// use here
});
请记住,要使Promises链接起来,您必须从.then()处理函数中返回一个值或Promise.无论如何,.forEach()始终返回未定义.
首先,通过将getmapist与.map()一起使用,将播放列表数组转换为Promises数组,然后将该Promises数组传递给Promise.all(),后者将返回一个Promise,当该数组中的所有Promises解析后,该Promise就会解析(或在第一个拒绝时拒绝).
内容总结
以上是互联网集市为您收集整理的javascript-循环从节点promise返回的对象,并馈送到下一个.then全部内容,希望文章能够帮你解决javascript-循环从节点promise返回的对象,并馈送到下一个.then所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。