синхронный цикл Javascript - PullRequest
1 голос
/ 13 апреля 2019

я хочу этот вывод 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');

1 Ответ

2 голосов
/ 13 апреля 2019

Один из способов добиться этого, используя текущий код, - использовать 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) { /* ... */ }.

...