我試圖在函數內部使用d3.json()
返回給定藝術家ID的Spotify API(如5K4W6rqBFWDnAN6FQUkS6x),但我無法弄清楚如何有效地返回數據。該功能看起來像d3 - 無法從json請求中返回數據?
// Get artist's related artist's information
function relatedArtists(id){
var jsonPromise = new Promise(function(resolve, reject) {
// Async JSON request
d3.json('https://api.spotify.com/v1/artists/' + id + '/related-artists', function(error, data){
if(error) reject(error);
resolve(data.artists);
});
});
jsonPromise.then(function(success) {
console.log(success);
//return(success) //doesn't work
});
jsonPromise.catch(function(error){
console.error(error);
});
}
我試着創建函數內的一個變量,然後修改它
function relatedArtists(id){
var testVar = 'hello';
var jsonPromise = new Promise(...{
// Async JSON request
d3.json(...)
});
jsonPromise.then(function(success) {
testVar = success;
});
return(testVar);
}
但testVar
仍然'hello'
,儘管我盡了最大努力。我已經做了一些關於範圍和承諾的閱讀,但是如果有一些我不瞭解的核心機制,我很樂意做更多的事情。謝謝閱讀!
哦,這真是COOL-所以'd3.queue'是直到請求完成推遲行動的一種方式?這似乎很有用,謝謝! –
是的,你可以推遲任何回調消耗的異步函數。最重要的是,你可以配置[concurrency](https://github.com/d3/d3-queue/blob/master/README.md#queue)並且執行任務[abortable](https://github.com/d3 /d3-queue/blob/master/README.md#queue_abort)... – undko