2 回答

TA贡献1921条经验 获得超9个赞
在所有请求完成后,我对其进行了一些更改,以便能够解决承诺;但是,当我 console.log 项目时,没有返回任何内容。
let items = []
function getItems(myUrl) {
return new Promise((resolve, reject) => {
request.post(authOptions, function(error, response, body) {
if (!error && response.statusCode === 200) {
// use the access token to access the Spotify Web API
var token = body.access_token;
var options = {
url: myUrl,
headers: {
'Authorization': 'Bearer ' + token
},
json: true
};
request.get(options, function(error, response, body) {
if (error) return reject(error);
for (var item of body['items']) {
items.push(item)
}
if (response.body.next != null) {
getItems(response.body.next)
} else {
resolve(items)
}
})
} else {
reject(error)
}
})
})
}
getItems('https://api.spotify.com/v1/playlists/1vZFw9hhUFzRugOqYQh7KK/tracks?offset=0')
.then(console.log(items))

TA贡献1765条经验 获得超5个赞
尝试使用异步/等待。我无法调试我的代码,因为我没有 Spotify 访问权限。但我希望它可以帮助你理解想法。
async function getItems(url) {
var items = [];
async function getData(url, items) {
return new Promise((resolve, reject) => {
request.post(authOptions, function(error, response, body) {
if (error || response.statusCode !== 200) reject(error);
var token = body.access_token;
var options = {
url: url,
headers: {
'Authorization': 'Bearer ' + token
},
json: true
};
request.get(options, function(error, response, body) {
if (error) return reject(error);
for (var item of body['items']) {
items.push(item)
}
if (response.body.next == null) {
resolve([items, null])
} else {
resolve([items, response.body.next])
}
})
})
})
}
while (url) {
var response = await getData(url, items);
items = response[0];
url = response[1];
}
return items;
}
const myUrl = 'https://api.spotify.com/v1/playlists/1vZFw9hhUFzRugOqYQh7KK/tracks?offset=0';
async function main() {
const items = await getItems(myUrl);
console.log('Result: ' + items)
}
main();
添加回答
举报