Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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);
      }
    });
  }


Буду рад любым дельным советам.
Ответить с цитированием
  #2 (permalink)  
Старый 18.04.2015, 22:36
Новичок на форуме
Отправить личное сообщение для iyntx Посмотреть профиль Найти все сообщения от iyntx
 
Регистрация: 04.01.2011
Сообщений: 3

прочитай про промисы и используй.
или
прочитай про паттерн "продолжение" и используй
и про замыкания прочитай

а ещё про var внутри for-in циклов

и про асинхронность )

Последний раз редактировалось iyntx, 19.04.2015 в 11:28.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить проблему Ingiborn Общие вопросы Javascript 0 10.07.2014 13:12
Пожалуйста помогите решить задачу на java alex01rus1991 Элементы интерфейса 9 27.11.2012 01:02
Ребят, помогите решить такую проблемку!!!! borcuhaworkout Элементы интерфейса 0 27.10.2012 01:26
Помогите решить задачку. Андрей_ Javascript под браузер 3 26.06.2012 16:21
History API. Помогите решить проблему InviS Events/DOM/Window 2 16.10.2011 14:34