【问题标题】:Python while loop conversion to Javascript [duplicate]Python while循环转换为Javascript [重复]
【发布时间】:2013-01-14 22:07:31
【问题描述】:

我将如何转换以下内容:

while True:
    # do something
    time.sleep(2)

到 JavaScript 中?

【问题讨论】:

  • 想想这在 Python 中做了什么:整个程序只是坐在那里,当你在 sleeping 时什么都不做。如果你在 JS 中做同样的事情,浏览器(或 node.js 服务器)也将无所事事,这很糟糕,因为你通常希望能够滚动页面或单击链接(或处理其他用户的连接)。
  • @abarnert - 感谢您指出这一点。我正在尝试创建一个进度条,该进度条将通过 ajax 调用每两秒“刷新”一次,以从数据库中获取进度。你会如何建议我这样做?
  • @David542:我建议您完全按照 Bergi 的回答显示的方式进行操作。这就是这些函数存在的原因。

标签: javascript python


【解决方案1】:

你不会,因为 JavaScript 不会休眠 - 它是同步的和基于事件的。但是,您可以通过setTimeoutsetInterval 安排稍后执行的功能:

var timerid = setInterval(function() {
    // do something
    // instead of "break", you'd use "clearTimeout(timerid)"
}, 2000);

对于您的 ajax 进度条,我推荐以下内容,它不会严格每 2 秒触发一次请求,而是等待它们返回:

function getUpdate() {
    myAjax(…, function onAjaxSuccess(result) { // an async event as well
        // show(result)
        if (!result.end)
            setTimeout(getUpdate, 2000);
    });
}
getUpdate();

【讨论】:

  • “它是同步的和基于事件的” - 你的意思是_a_synchronous,对吧?
  • @Brian:假设“在每个异步事件上都会发生同步的单线程执行”
  • +1。但可能值得一提的是,如果“做某事”需要 1 秒,setInterval 可能会在 0、2、4、8、10... 秒时调用它,而 OP 的 Python 代码将在 0、3 秒运行, 6, 9, 12, ... 秒。 (为此,您可以使用setTimeout 并在回调结束时安排一个新的setTimeout。)
  • 处理我的建议的好方法——比我想的要好。太糟糕了,我已经给你 +1 了,不能再给你了。
【解决方案2】:
setInterval(function() {
  console.log('do something');
}, 2000);

http://jsfiddle.net/rS9bH/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    相关资源
    最近更新 更多