Всем здравствуйте. Только начинаю изучать JS, и вот хочу сделать скроблер с spotify to vk. Надо сделать кучу запросов к апи и расставить таймеры. Голова уже кипит, сделал через callback и setTimeout, но весь код выполняется в одно время.
// Запускаем поиск, добавление, редактирование трека.
// artist - Имя артиста, track - название композиции
// user_id - id пользователя в ВК
engine(artist, track, user_id);
// Первые таймауты я сделал тут, думал заработают.
// Но что-то не работают.
// Это объект с запросами к vk.
vk = {
searchAudio: function(artist, title, callback) {
setTimeout(function() {
q = artist + ' ' + title;
VK.Api.call('audio.search', { q: q }, function(e) {
return callback(e);
});
}, 333);
},
addAudio: function(audio_id, owner_id, callback) {
setTimeout(function() {
VK.Api.call('audio.add', { audio_id: audio_id, owner_id: owner_id }, function(e) {
return callback(e);
});
}, 333);
},
editAudio: function(owner_id, audio_id, title, callback) {
setTimeout(function() {
VK.Api.call('audio.edit', { owner_id: owner_id, audio_id: audio_id, title: title }, function(e) {
return callback(e);
});
}, 333);
},
addToAlbum: function(album_id, audio_ids, callback) {
setTimeout(function() {
VK.Api.call('audio.moveToAlbum', { album_id: album_id, audio_ids: audio_ids }, function(e) {
return callback(e);
});
}, 333);
},
}
// А вот сам двигатель прогресса
// вторые таймеры я уже тут поставил, но тоже не работают.
// Голова уже кипит.
// Я понимаю что можно сделать все красивее, но пока мозгов не хватает.
// Направьте пожалуйста на верный путь.
// Естественно надо будет еще доделать обработчик ошибок, чтоб если
// вылетает капча, можно было ее ввести и продолжить, но пока пытаюсь
// решать проблему с временем запуска.
function engine(artist, title, user_id, album_id) {
user_id = user_id || 176527444;
album_id = album_id || 58194499;
vk.searchAudio(artist, title, function(e) {
if (e.response) {
e = e.response;
for (key in e) {
if (key > 0) {
t = e[key];
var title = t.title;
setTimeout(function() {
vk.addAudio(t.aid, t.owner_id, function(e) {
if (e.response) {
ids = e.response;
var newTitle = title + ' [SPOTIFY]';
setTimeout(function() {
vk.editAudio(user_id, ids, newTitle, function(e) {
if (e.response) {
setTimeout(function() {
vk.addToAlbum(album_id, ids, function(e) {
if (e.response) {
console.log('Ok');
} else {
error = e.error;
console.log(error.error_code + ' ' + error.error_msg);
}
});
}, 333);
} else {
console.log('Error 3:');
console.log(e);
}
});
}, 333);
} else {
console.log('Error 2:');
console.log(e);
}
});
}, 333);
}
}
} else {
console.log('Error 1:');
console.log(e);
}
});
}
Буду рад любым дельным советам.