如何暂停间隔并等待功能响应,然后再次运行

时间:2018-08-07 22:40:57

标签: javascript

正如您在此处看到的,我有一个小功能,它将迫使玩家进入特定的坐标。基本上,作为函数参数,我设置了我希望玩家去的坐标数组。如您在下面的示例中看到的,只要它命中其他位置,就意味着玩家停留在特定的坐标上。并且它向索引添加+1,因此它将获得第二个坐标。我正在尝试在“其他”标签中运行一个函数,如果该函数返回true,则我想立即运行“其他”标签上的代码。我该如何实现? :P

var player = {
    x: 21,
    y: 24
}

function goCoords(data) {
    var index = 0;
    var i = setInterval(function() {
        if (index < data.length) {
            var coords = data[index];
            if (!(Math.abs(player.x - coords.x) <= 0 && Math.abs(player.y - coords.y) <= 0)) {
                //go(coords.x, coords.y); It will trying to go to these coords
            } else {
                //If on coords, run a function, and wait for return true
                //And run the code below again
                if (index < coords.length) {
                    index++;
                }
            }
        } else {
            clearInterval(i);
        }
    }, 150);
}

goCoords([{ x: 21, y: 24 }, { x: 21, y: 29 }]);

1 个答案:

答案 0 :(得分:0)

ttl设置为您要运行相同代码的数量。

async function goCoords(data) {
  // ...
  else {
    await recursiveFunction(...)
  }
}

async recursiveFunction(..., ttl = 2) {
  if (ttl < 1) {
    return
  }
  let result = await theFunctionThatMayReturnTrue()
  if (result) {
    // code to be executed n times (n = ttl)
    await recursiveFunction(..., --ttl)
}