模拟定时异步调用

时间:2013-12-02 17:41:59

标签: javascript asynchronous sleep

我正在尝试模拟异步回调,它会在设定的秒数内执行某些操作。我希望这些都能同时记录,从触发它们起3秒钟。现在他们连续3秒后连续登录。 sleep函数阻止整个脚本运行。知道为什么吗?

function sleep(delay) {
    var start = new Date().getTime();
    while (new Date().getTime() < start + delay);
}

var same = function(string, callback){
    new sleep(3000);
    return callback(string);
}

same("same1", function(string){
    console.log(string);
});
same("same2", function(string){
    console.log(string);
});
same("same3", function(string){
    console.log(string);
});

2 个答案:

答案 0 :(得分:11)

使用setTimeout()为将来的时间安排一些事情。

此外,setTimeout()是异步的,您的循环不是。

var same = function(str, callback){
    setTimeout(function() {
        callback(str);
    }, 3000);
}

注意:您无法从异步回调中返回值,因为它是异步的。函数same()完成并在实际调用回调之前返回。

答案 1 :(得分:0)

借助ES6,您可以基于辅助程序延迟功能使用以下技术:

const same = async (str, callback) => {        

  const delay = ms => new Promise(res => setTimeout(res, ms))
  await delay(3000)

  const string = callback(str)
  console.log(string);
}

same()