चलाने के लिए async.times समाप्त हो जाए, तब तक मुझे प्रतीक्षा करने देंगी, मैं एक वेब अनुप्रयोग बनाने के लिए एक node.js सर्वर, Spotify API, और spotify-web-api-js नोड मॉड्यूल का उपयोग कर रहा हूं जहां उपयोगकर्ता किसी कलाकार का नाम दर्ज कर सकता है, संबंधित कलाकारों के गीतों की एक सूची देख सकता है, और उसके बाद वैकल्पिक रूप से उस प्लेलिस्ट को अपने स्वयं के Spotify खाते में सहेज सकता है। हालांकि, मुझे अभी भी अंतिम चरण में परेशानी हो रही है।कोई ईवेंट श्रोता कैसे चुनें, जब तक कि एक कार्य
मेरे उपयोगकर्ता प्राधिकरण प्रवाह पहले हो रहा है:
if (params.access_token) {
s.setAccessToken(params.access_token);
s.getMe().then(function(data) {
console.log(data);
console.log(data.id);
user_id = data.id;
यह नीचे है जहां गाने के वास्तविक विवरण एपीआई द्वारा इकट्ठे हुए हैं। हालांकि यह कम हो गया है, यह पहले होता है और उपयोगकर्ता प्राधिकरण केवल तब होता है जब उपयोगकर्ता उस पृष्ठ पर दूसरे बटन पर क्लिक करता है।
async.times(counter, function(n, next){
s.getArtistTopTracks(relatedArtists[n].id, "US", function (err, data2) {
relatedArtists[n].song = data2.tracks[0].name;
relatedArtists[n].uri = data2.tracks[0].uri;
console.log(relatedArtists[n].uri);
// make sure to put the access token here add song to playlist
// create array
song_uris.push(relatedArtists[n].uri);
console.log(song_uris);
// song_uris = relatedArtists[n].uri;
//
// console.log(song_uris);
next(null);
$("#playlist").load(function() {
s.addTracksToPlaylist(user_id, playlist_id, song_uris);
});
});
}, function(err) {
// console.table(relatedArtists);
for (k = 0; k < 20; k++)
{
$('#related-artist').append('<p><strong>' + relatedArtists[k].name + '</strong> -- \"' + relatedArtists[k].song + '\"</p>');
}
(JSBin of full code here, क्योंकि मैं अपने खुद के सर्वर पर browserify का उपयोग हालांकि यह काम नहीं कर सकते)
अभी, लाइन 114 पर मेरे पास है song_uris.push(relatedArtists[n].uri);
एक सरणी में सामग्री धक्का, async.times
का उपयोग कर। ,
s.createPlaylist(user_id, {name: 'Related Artist Playlist'}).then(function(data3) {
console.log(data3);
playlist_id = data3.uri;
playlist_id = playlist_id.substring(33);
console.log(playlist_id);
console.log(song_uris);
});
वहाँ, console.log(song_uris)
एक खाली सरणी से पता चलता तो इसलिए की तरह addTracksToPlaylist()
टूट जाता है: के बाद से इस जहाँ मैं लाइन 66 पर प्लेलिस्ट बनाने के नीचे है, यह एक खाली सरणी के रूप में दिखाता
दूसरी ओर, यदि मैं नीचे addTracksToPlaylist()
करने का प्रयास करता हूं, तो मेरे पास उपयोगकर्ता के खाते तक पहुंचने का अधिकार नहीं है।
उपयोगकर्ता प्रमाणीकरण प्रवाह बाद में जोड़ा गया है कि गीतों की सूची दिखाने की मूल कार्यक्षमता पहले से ही काम कर रही है, लेकिन मुझे यकीन नहीं है कि उस सूची को मेरे उपयोगकर्ता की प्लेलिस्ट में सहेजने के लिए इसे प्रभावी ढंग से कैसे पुन: सक्रिय किया जाए। फिलहाल, मैं केवल Spotify खाते में एक खाली प्लेलिस्ट बना रहा हूं।
मैं किस प्रकार का इवेंट श्रोता जोड़ सकता हूं ताकि यह async.times
के प्रत्येक उदाहरण को तब तक इंतजार कर सके जब addTracksToPlaylist()
काम कर सके? इस डेटा को प्राप्त करने से पहले डीओएम पहले ही लोड हो चुका है। मैंने this question देखा, लेकिन इस समस्या को हल करने में मुझे काफी मदद नहीं मिली। धन्यवाद!
संपादित करें: अब मेरे पास song_uri
सरणी है जिस तरह से मुझे इसकी आवश्यकता है, लेकिन मैं अभी भी प्लेलिस्ट में नहीं पहुंच सकता। मैं अपने एक्सेस टोकन के स्थान के साथ खेल रहा हूं ताकि मैं बनाई गई प्लेलिस्ट तक पहुंच सकूं, लेकिन अभी भी कोई भाग्य नहीं है।
लाइन 130 पर console.log(song_uris);
बयान पूरा सरणी है कि मैं जरूरत से पता चलता है, लेकिन जब मैं इसे s.addTracksToPlaylist(user_id, playlist_id, song_uris);
में डालने मैं डेवलपर कंसोल में इन त्रुटियों को मिलता है:
POST https://api.spotify.com/v1/users/tenderoni-/playlists/7MtQTzUsxD4IEJ8NmmE36q/tracks?uris= 400 (Bad Request)
bundle.js:10616
Uncaught (in promise) XMLHttpRequest {}
असल में, यह कुछ के लिए पैरामीटर प्राप्त नहीं कर रहा है कारण। और मैं पहले से playlist_id
लॉग इन करता हूं, इसलिए मैं इसे काम कर सकता हूं (साथ ही, मुझे अपने Spotify खाते में निर्दिष्ट शीर्षक के साथ रिक्त प्लेलिस्ट दिखाई देती हैं)।
पूर्ण अद्यतन यहाँ कोड: https://github.com/yamilethmedina/cs50xmiami/blob/master/assignments/portfolio/public/scripts.js
क्या आप जेएसबीन पोस्ट में प्रमाण-पत्र शामिल करना चाहते थे? मैं यह नहीं बता सकता कि वे कुछ एपीआई दस्तावेज़ से हैं या यदि वे आपका हैं। –