Невозможно синхронизировать функции - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь выполнять функции одну за другой в синхронизации.

var subtasks = ['Site', 'Draw', 'Material', 'Conduction', 'Cable', 'Install', 'Foundation']

function clickMe() {
  return new Promise(resolve => {
    jQuery("#addtoptasksubmit").trigger("click"); // triggering the button click
    resolve("done click");
  });
}

function typeWord(word) {
  return new Promise(resolve => {
    jQuery("#todotask").val(word); // input
    resolve("done type");
  });
}

function createSubTask() {
  return new Promise(res => {
    jQuery('#todotask').focus();
    res("done")

  })
};

function startLoop(i) {
  new Promise(resolve => {
    var promise = createSubTask();
    promise.then(resolve => {
      var typePromise = typeWord(subtasks[i]);
      typePromise.then((resolve) => {
        var clickPromise = clickMe();
        clickPromise.then((resolve) => {
          console.log(resolve);
        });
      });
    });
  })
}

let i = 0;
let prom = startLoop(i);

prom.then((res) => {
  startLoop(i++);
})

код не работает должным образом, и я также хотел увеличить i автоматически.Цикл for не показывается.

Я пробовал использовать цикл и рекурсивную асинхронную функцию в chrome.

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Разве вашей функции startLoop (i) не нужен оператор return для нового вызова Promise ()?Я должен представить себе это:

// prom = undefined as startLoop never returns anything
let prom = startLoop(i);

Измените свой код так:

// Current code from description
function startLoop(i) {
  new Promise(resolve => {

// Fixed code
function startLoop(i) {
  return new Promise(resolve => {
0 голосов
/ 01 июня 2019
var subtasks = ['Site', 'Draw', 'Material', 'Conduction', 'Cable', 'Install', 'Foundation'];

function clickMe() {
  return new Promise(resolve => {
    setTimeout(() => {
      jQuery("#addtoptasksubmit").trigger("click");
      resolve("done click");
    }, 1000);
  });
}

function typeWord(word) {
  return new Promise(resolve => {
    jQuery("#todotask").val(word);
    resolve("done type");
  });
}


function createSubTask() {
  return new Promise(res => {
    jQuery('#todotask').focus();
    res("done");

  })
};

function startLoop(i) {
  return new Promise(res => {
    var promise = createSubTask();
    promise.then(
      (resolve) => {
        var typePromise = typeWord(subtasks[i]);
        typePromise.then((resolve) => {
          console.trace(resolve);
          var clickPromise = clickMe();
          clickPromise.then((resolve) => {
            console.trace(resolve);
            res("done loop " + subtasks[i]);
          });
        });
      }
    );
  })
}

var _index_ = 0;

var _how_ = setInterval(() => {
  if (_index_ < subtasks.length) {
    let loopPromise = startLoop(_index_);
    loopPromise.then((resolve) => {
      _index_ += 1;
    });
  } else {
    console.log("all done go get the new task");
    clearInterval(_how_);
  }
}, 10000);

Я могу оптимизировать его дальше ....

...