首页 > 解决方案 > 同步while循环javascript

问题描述

我想要这个输出 1,1,1,....

而不是 2,1

我想同步运行

//just wait 2 seconds
function s(callback){
    setTimeout(() => {
        callback()
    }, 2000);
}
a=[2]
while (a.length!==0){
    a.shift()
    s(()=>{
        a.push(2)
        console.log('1');
    })
}
console.log('2');

标签: javascriptwhile-loopcallbacksynchronous

解决方案


使用当前代码实现此目的的一种方法是使用async/await和 Promises。

//just wait 2 seconds
function s(callback) {
  return new Promise(resolve => {
    setTimeout(() => {
      callback()
      resolve()
    }, 2000);
  })
}

const main = async function() {
  const a = [2];
  while (a.length !== 0) {
    a.shift()
    // This "waits" for s to complete. And s returns a Promise which completes after 2 secs
    await s(() => {
      a.push(2)
      console.log('1');
    })
  }
  console.log('2');
}

main()

如果你真的只需要一个无限循环while(true) { /* ... */ }就足够了。


推荐阅读