2017-04-08 68 views
0

在JavaScript(節點)中,我應該按順序運行幾個表達式,並且在一些延遲中。這是行不通的,因爲它們都是立即運行,混合排列在一起;我無法評估JavaScript中的延遲和排序表達式

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);

因爲它會停止評估一個表達式。我的程序流程將會到達其他地方,並且該功能將無故運行。

我需要一些同步函數來延遲運行並按照我的寫入順序運行。我無法實現它。

我不知道如果我搞砸了設計。我只想做一個在線遊戲點擊機器人。但這是不同的。這個網絡機器人應該像人類一樣行事,並且隨意拖延點擊事物。

回答

0

看看承諾,並在特殊的bluebird。他們有一個延遲方法,將完成你以後的事情。

const Promise = require('bluebird'); 

Promise.resolve(1) 
    .delay(500) 
    .then((n) => { 
     console.log(n); 
     return ++n; 
    }) 
    .delay(1000) 
    .then(n => console.log(n)); 
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));