首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将旧版(非事件驱动)软件移植到javascript

如何将旧版(非事件驱动)软件移植到javascript
EN

Stack Overflow用户
提问于 2019-02-09 16:41:11
回答 1查看 49关注 0票数 0

我想把一些旧的软件移植到javascript。这些程序通常不是事件驱动的,而只是循环。它们只是暂停以从输入流获取输入。我不能仅仅将它们转换为javascript,因为经典的pascal或c读指令没有等效的内容。我认为可以使用输入字段来触发onchange事件。然后,我的程序将被暂停,直到事件发生。但很明显你不能暂停JS程序。

我的第二次尝试是在onchange事件上设置一个标志。我的程序一直处于循环状态,直到设置了标志,然后读取输入字段的值。但是为了防止浏览器被这个循环所阻塞,我需要在两次轮询之间提供一些睡眠功能。显然,在JS中没有类似于睡眠功能的功能。

这是如何做到的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-09 19:07:39

您可以使用允诺和await/async创建类似于阻塞代码的代码。

但是需要注意的是,这是而不是阻塞代码。在await,等待执行的其他代码可以交织。

代码语言:javascript
复制
function waitForIntput(id) {
  // create a Promise that resolves at the input event
  return new Promise((resolve, reject) => {
    let elm = document.getElementById(id)

    function listener(evt) {
       // remove the listener so that no memory leaking occures
       elm.removeEventListener('input', listener)

       // resolve the promise with the current value of the element
       resolve(elm.value)
    }

    // call the listener on the input event
    elm.addEventListener('input', listener, false);
  })

}

(async function() {
  while(true) {
     console.log('before waitForIntput')
     console.log(await waitForIntput('test'))
     console.log('after waitForIntput')
  }
}())
代码语言:javascript
复制
<input id="test">

如果解决这个问题是个好主意,那取决于具体的用例。通常,您应该检查要执行的任务是如何在新环境中解决的,而不是将旧的样式强加到新的环境中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54608308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档