尚方宝剑之说
ECMAScript 6版本,使用用于“代码阻塞”的生成器:因为最初的问题是七年前发布的,所以我没有费心回答确切的代码,因为它太简单了,而且已经回答了。这将有助于解决更复杂的问题,例如,如果您至少需要两次睡眠,或者您计划对异步执行进行排序。请随意修改它以满足您的需要。let sleeptime = 100function* clock(){ let i = 0 while( i <= 10000 ) { i++ console.log(i); // actually, just do stuff you wanna do. setTimeout( ()=> { clk.next() } , sleeptime ) yield }}let clk = clock()clk.next()职能*()=>箭头函数您还可以通过承诺:function sleep(ms){ return( new Promise(function(resolve, reject) { setTimeout(function() { resolve(); }, ms); }) );}sleep(1000).then(function(){ console.log('1') sleep(1000).then(function() { console.log('2') })})或者简单得多,也不那么花哨。function sleep(ms, f){ return( setTimeout(f, ms) )}sleep(500, function(){ console.log('1') sleep(500, function() { console.log('2') })})console.log('Event chain launched')如果你只是在等待某种情况的发生,你可以这样等待function waitTill(condition, thenDo){ if (eval(condition)) { thenDo() return } setTimeout( () => { waitTill(condition, thenDo) } , 1 )}x=0waitTill( 'x>2 || x==1' , () => { console.log("Conditions met!") })// Simulating the changesetTimeout( () => { x = 1 } , 1000)