如何让程序等待 javascript 中的按钮按下?

Eug*_*ash 7 javascript blocking

我需要修改一些旧的 javascript 代码。有一个地方我想等到用户按下两个按钮之一,然后继续程序流程(如prompt()函数)。如何做到这一点?

Jur*_*oek 7

只需创建一个承诺并将解析函数存储在其范围之外的全局变量中。然后让程序等待 promise 解决(使用“async”和“await”)。该承诺通过调用该全局变量在单击按钮时得到解决。我在国际象棋程序中使用了这种技术来等待促销弹出窗口的答案:

var _promote; /* resolve-function reference */

async function promote_piece(pce, fld, clr) {
  var type;
  (...)
  show_mpw(clr); /* show modal promotion window */
  var promise = new Promise((resolve) => { _promote = resolve });
  await promise.then((result) => { type = result });
  if (type === undefined) type = "Q";
  (...)
}
Run Code Online (Sandbox Code Playgroud)

所以在创建promise之后,程序会一直等到弹出窗口解决它。弹出窗口在关闭时按如下方式解析承诺:

_promote(type); /* resolve promotion-promise */
Run Code Online (Sandbox Code Playgroud)

注意请记住,在这种情况下,promotion_piece() 函数本身也必须使用“await”关键字调用!否则程序将异步执行并继续执行


ken*_*ytm 4

您需要在此时中断您的函数,并添加另一个函数来捕获用户的按钮按下事件。

您可以使用Narrative Javascript引入阻塞行为并简化它(这样您就不需要将函数分成两部分),但请注意,该库自 2013 年以来已被废弃。