javascript中2行代码之间的时间延迟,而不是settimeout

Jam*_*mex 16 javascript

是否有一个函数会在两行代码之间添加一个时间延迟.不是settimeout,因为settimeout在其参数中需要一个函数/对象.

我正在寻找像这样的伪代码

write "abc";
delay(500);
write "xyz";
Run Code Online (Sandbox Code Playgroud)

TIA

编辑:jimr在我的另一个线程中的解决方案适用于我的目的,Robusto 也是如此.

我只是想知道为什么Robusto和CMS的链接给出的"睡眠"方法不是首选.与settimeout方法有什么不同,因为它们都会在代码中引入暂停?(settimeout在执行函数之前暂停,sleep方法在执行下一行之前暂停.)

Rob*_*sto 17

以下是笨重和丑陋的我永远不会在我自己的代码中做到这一点,我不推荐它,但它表明这样的事情是可能的.

// time arg is in milliseconds
function delay(time) {
  var d1 = new Date();
  var d2 = new Date();
  while (d2.valueOf() < d1.valueOf() + time) {
    d2 = new Date();
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个可怕,可怕,可怕的想法.事实上,我想用"可怕"这个词填写评论栏,但有人可能会修改评论.**在别人的CPU上燃烧时间很粗鲁**.至少**具有拒绝"延迟"超过1/4秒左右(250ms)的功能.仍然很粗鲁,但至少它非常简短. (20认同)
  • 我讨厌公开表达,但由于我无法控制的一些原因,我需要在测试规范中实现同步延迟.谢谢你 (3认同)
  • 它有助于调试复杂的ui错误.只是为了在某些地方阻止执行以获得关于什么时候发生的事情的线索. (2认同)

Joe*_*orn 14

您可以使用setTimeout,以便几乎看起来代码在两行上运行:

write('abc')
setTimeout(function() {
write('xyz')
},500)
Run Code Online (Sandbox Code Playgroud)


Tob*_* P. 12

睡眠方法不可用,因为JavaScript执行会阻止浏览器,因此睡眠方法会阻止浏览器500毫秒,你真的想让你的浏览器没有响应半秒吗?

按建议使用setTimeout.

  • @Jamex是的它 - 你只需要调整你想做的事情.在繁忙的循环中燃烧CPU时间是一个非常糟糕的主意,特别是当你对其他人的计算机进行操作时. (10认同)

Eli*_*rey 5

在JavaScript 1.7中,yieldasync.js结合使用,您可以执行以下操作:

var yourFunction = _(function () {
    write("abc");
    yield to.sleep(.500);
    write("xyz");
});
Run Code Online (Sandbox Code Playgroud)