我无法在javascript中评估延迟和有序表达式

时间:2017-04-08 19:20:45

标签: javascript node.js

在Javascript(Node)中,我应该在一个顺序和一些延迟中运行几个表达式。这不起作用,因为所有这些都是以混合顺序一起立即运行的;



var i = 0;

function run(){
  console.log(i++);
};

setTimeout(run, 500);
setTimeout(run, 500);
setTimeout(run, 500);
setTimeout(run, 500);




这不好:



var i = 0;

function run(){
  console.log(i++);
};

setTimeout(run, 500);
setTimeout(run, 1000);
setTimeout(run, 1500);
setTimeout(run, 1600);




因为它应该停止评估下一个表达式。我的程序流将转到其他地方,该功能将无缘无故地运行。

我需要一些同步函数来延迟运行并按照我的书面顺序运行。我无法实现它。

我不知道如果搞砸了设计。我只是想点击机器人在线游戏。但这是不同的。这个网络机器人应该像人一样,随机延迟点击一下。

2 个答案:

答案 0 :(得分:0)

看看Promises,特别是bluebird。他们有一种延迟方法,可以完全按照你所做的那样。

const Promise = require('bluebird');

Promise.resolve(1)
    .delay(500)
    .then((n) => {
        console.log(n);
        return ++n;
    })
    .delay(1000)
    .then(n => console.log(n));

答案 1 :(得分:0)

jsfiddle

var i = 0;

function run (delay) {
  return function () {
    return new Promise(function (resolve, reject) {
      setTimeout(function () {
        console.log(i++);
        resolve();
      }, delay);
    });
  };
}

Promise.resolve()
  .then(run(500))
  .then(run(1000))
  .then(run(1500));
相关问题