Асинхронный генератор в т.е 11 - PullRequest
1 голос
/ 08 апреля 2019

У меня проблема с попыткой получить асинхронную работу в Internet Explorer. Работает в других браузерах.

Я пытался перекомпилировать js, используя babeljs.io

Это метод, который я хочу запустить, и я скомпилирую его в es2017, используя babeljs.io

async function uploadStateLoop() {
  var endingStatesArr = ["Not enough privileges for uploading","Upload successful", "Session ended", "Session ended - refresh your page"];
  var stateID = getCookie('uploadStateID');
  var req = new XMLHttpRequest();

  do {
    var response = req.responseText;

    req.onreadystatechange = function () {
      console.log(response);

      if (req.readyState == XMLHttpRequest.DONE) {
        $('#uploadState').text('Upload state: ' + response);
      }
    };

    req.open('GET', '/uploadstate?id=' + stateID);
    req.send();
    await sleep(500);
  } while (endingStatesArr.indexOf(response) < 0);

  $('#blabla-upload').attr("disabled", false);
  $('#blabla-upload').val(null);
  $('#uploadProgressBar').fadeTo(5000, 0);
}

Это результат перекомпиляции:

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
  try {
    var info = gen[key](arg);
    var value = info.value;
  } catch (error) {
    reject(error);
    return;
  }
  if (info.done) {
    resolve(value);
  } else {
    Promise.resolve(value).then(_next, _throw);
  }
}

function _asyncToGenerator(fn) {
  return function() {
    var self = this,
      args = arguments;
    return new Promise(function(resolve, reject) {
      var gen = fn.apply(self, args);
      function _next(value) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
      }
      function _throw(err) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
      }
      _next(undefined);
    });
  };
}

function uploadStateLoop() {
  return _uploadStateLoop.apply(this, arguments);
}

function _uploadStateLoop() {
  _uploadStateLoop = _asyncToGenerator(function*() {
    var endingStatesArr = [
      "Not enough privileges for uploading",
      "Session ended",
      "Session ended - refresh your page"
    ];
    var stateID = getCookie("uploadStateID");
    var req = new XMLHttpRequest();

    do {
      var response = req.responseText;

      req.onreadystatechange = function() {
        console.log(response);

        if (req.readyState == XMLHttpRequest.DONE) {
          $("#uploadState").text("Upload state: " + response);
        }
      };

      req.open("GET", "/uploadstate?id=" + stateID);
      req.send();
      yield sleep(500);
    } while (endingStatesArr.indexOf(response) < 0);

    $("#blabla-upload").attr("disabled", false);
    $("#blabla-upload").val(null);
    $("#uploadProgressBar").fadeTo(5000, 0);
  });
  return _uploadStateLoop.apply(this, arguments);
}

Итак, сейчас я получаю синтаксическую ошибку в этой строке:

_uploadStateLoop = _asyncToGenerator(function*() {

Ожидается, что будет "(" вместо * я верю. Есть идеи, как заставить его работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...