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();
添加回答
舉報