我对node.js和异步编程非常陌生。我正在尝试制作一个可以改变Spotify播放列表的程序。我将用户的播放列表放入了一个数组。
我想在网页上显示此数组供用户选择。用户做出选择后,我想使用所选元素继续该程序。这是我到目前为止编写的代码段。
// Callback functions
function plCallback(selected_playlist) {
playlist_id =
console.log(playlist_id);
}
function getPlaylist(body, plCallback) {
// Pull user playlists
for (var i = 0; i < body.items.length; i++) {
playlistArray.push({'name': body.items[i].name, 'id': body.items[i].id});
}
// prompt user to select desired playlist to shuffle
var selPlaylist = document.getElementById('playlist-drop');
for (var i = 0; i < playlistArray.length; i++) {
var opt = playlistArray[i].name;
var el = document.createElement("option");
el.textContent = opt;
el.value = opt;
select.appendChild(el);
}
// send selected playlist to Callback
var dropdown_return = document.getElementById('playlist-drop');
var selected_playlist = dropdown_return.options[dropdown_return.selectedIndex].value;
plCallback(selected_playlist);
}
由于我对js和node还是很陌生,我什至需要寻找的东西也让我感到茫然。
总结一下:我用Spotify播放列表填充了一个js数组。我想向用户显示此列表以进行选择。做出选择后,我需要程序继续使用上述选择。
答案 0 :(得分:0)
我看不到node.js的位置。但是我认为您的“回调”构造不正确..
这是函数getPlaylist()
调用函数plCallback()
并传递获得的playlist
对象,
这还不能使getPlaylist()
保持异步状态。
function plCallback(playlist) {
if (playlist) {
// Do something ..
}
}
function getPlaylist(body) {
var playlist = .. ;
plCallback(playlist);
}
// Your call ..
getPlaylist(body);
这是getPlaylist()
使用的回调函数,该回调是getPlaylist()
的参数,并且在获取playlist
之后触发,尽管如此,这仍然不会异步发生。
“回调”构造的一个很大好处是,由于没有定义固定的playlist
函数,因此您可以为每个呼叫使用plCallback()
做不同的事情。
function getPlaylist(body, plCallback) {
var playlist = .. ;
plCallback(playlist);
}
// Your call ..
getPlaylist(body, function(playlist) {
if (playlist) {
// Do something ..
}
});
现在,要使该函数异步,请签出:How can I create an Asynchronous function in Javascript?