【问题标题】:How to make loop not to continue until an event happens?如何使循环在事件发生之前不继续?
【发布时间】:2023-01-08 23:23:28
【问题描述】:

我正在写一个游戏的功能:

function Game(){
    while(true){

        ***

        for(var i = 0; i < level; i++){
            var color;
            $(".btn").on("click", function(event) {
                ButtonClickResponse(this.id);
                color = this.id;
            });
            if(colorsOrder[i] != color){
                GameOver();
                return;
            }
        }

        ***

    }
    
}

当循环开始并且不等待上述事件完成时,函数循环中的“if语句”运行并立即递增“i”多次。

我在 google 和 stackoverflow 中搜索了使用“async await”和“promise”来解决问题,但并没有真正理解它是如何工作的,所以无法在我的代码中实现它。

【问题讨论】:

    标签: javascript events async-await


    【解决方案1】:

    这应该有效,虽然我没有测试它而且你做的事情不是用 javascript 方式

    async function Game() {
      while (true) {
        var level = 1;
        $("#level-title").text("Level " + level);
        var colorsOrder = [];
        var randColor = GenerateRandomSquareColor();
        colorsOrder.push(randColor);
        ButtonClickResponse(randColor);
    
        for (var i = 0; i < level; i++) {
          var color;
    
          // await for the click event
          const event = await waitForClick($(".btn"));
          // do stuff with the result
          ButtonClickResponse(event.id);
          color = event.id;
    
          if (colorsOrder[i] != color) {
            GameOver();
            return;
          }
    
          level++;
        }
      }
    }
    
    function waitForClick(element) {
      // create new promise
      return new Promise((resolve) => {
        const handler = function (event) {
          // when button is clicked remove listener
          element.off("click", handler);
          // and resolve the promise
          resolve(event);
        };
        // listen for click
        element.on("click", handler);
      });
    }
    

    【讨论】:

    • 你说的不是js方式是什么意思?你能解释一下你的等待点击功能是什么意思吗?
    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多