Проблема, когда цикл зацикливает функцию, которая вызывает несколько JSON несколько раз - PullRequest
0 голосов
/ 11 января 2019

У меня есть функция (selectWord ()), которая собирает выбранные слова, которая вызывает функцию (view (word [i])), передавая каждое слово в цикле.

selectWord ():

$('#button').on('click', function() {
  var text = "";
  var lang = $("#lang").text();
  if (window.getSelection) {
    text = window.getSelection().toString();
  } else if (document.selection && document.selection.type != "Control") {
    text = document.selection.createRange().text;
  }
  var word = text.split(" ");
  $('#load').html("");
  var promises = [];

  for (var i = 0; i < word.length; i++) {
    promises.push(Promise.resolve(view(word[i], lang)));
  }

  Promise.all(promises).catch(function(err) {
    console.log("error");
    return err;
  }).then(function() {
    $.each(promises, function(key, val) {
      $.each(val, function(k, v) {
        console.log("promises " + k + " " + v + " " + v[k] + '<br>');
        $('#div').append("promises " + k + " " + v + " " + v[k] + '<br>');
      });
    });
  });
}
});

вид ():

function view(word, lang) {
  var html = "";
  var id = "";
  img = "";
  ids = [];
  fullLemmas = [];
  gramCats = [];
  setTimeout(wiki(word, lang), 1000);
  setTimeout(function() {
    for (var i = 0; i < ids.length; ++i) {
      if (i == 0) {
        getImg(ids[i], word);
        wiki = fullLemmas[i];
        gramCategory = gramCats[i];
      }
    }
  }, 2000);

  setTimeout(function() {
    for (var i = 0; i < ids.length; ++i) {
      if (i == 0) {
        id = ids[i];
        html += '<li class="col-12 col-md-6 col-lg-3"><div class="cnt-block equal-hight" style="height: 349px;"><figure><img id ="' + id + '" src="' + img + '" class="img-responsive" alt=""></figure><h3><a href="https://es.wikipedia.org/wiki/' + fullLemmas[i] + '">"' + word + ' (' + gramCats[i] + ')' + '"</a></h3>';
      }
      html += '<p><a href="https://es.wikipedia.org/wiki/' + fullLemmas[i] + '">' + fullLemmas[i] + ' (' + gramCats[i] + ')</a></p>';
    }
    html += '</li>';
    return html;
  }, 3000);
}

Функция представления в свою очередь вызывает две функции, которые выполняются через JSON с getJSON (), проблема в синхронности. Я использовал setTimeOut () и Promises, но я не понимаю, что он возвращает.

При отображении слов сохраняются только данные последнего слова.

...