Показать сообщение отдельно
  #1 (permalink)  
Старый 18.04.2015, 21:20
Новичок на форуме
Отправить личное сообщение для maks.portnyagin Посмотреть профиль Найти все сообщения от maks.portnyagin
 
Регистрация: 18.04.2015
Сообщений: 2

setTimeout. Помогите решить проблемку. Куча запросов к API VK.
Всем здравствуйте. Только начинаю изучать 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);
      }
    });
  }


Буду рад любым дельным советам.
Ответить с цитированием