我有以下代码:

for(var i = 0; i < 10; i ++){
    DoIt();
    console.log(i);
}

function DoIt(){
    var nightmare = Nightmare({
        electronPath: require('./node_modules/electron'),
        openDevTools:{
            mode: 'detach'
        },
        show: true
    });
    nightmare
        .goto('http://google.com')
        .end(()=>{
            return true;
        })
}

我在 Electron 应用程序内部加粗。但是,这会执行异步操作,并且我会立即在控制台(0、1、2、3、4、5、6、7、8、9)中输出,而 Nightmare 会同时打开所有10个窗口!

如何同步执行以下代码?
我想得到以下结果:

计数器
1)计数器= 0

2)恶作剧

3) Nightmare 结束,反击++

1)计数器= 1

2) Nightmare 工作

3) Nightmare 结束,反击++

等等。

最佳答案

我认为您可以改为执行以下操作或for循环:

(function iteration(i) {
  if (i < 10) {
    DoIt(i).then(() => iteration(i + 1))
  }
})(0)

为此,请确保DoIt返回Promise:
function DoIt(index) {
  var nightmare = Nightmare({
    electronPath: require('./node_modules/electron'),
    openDevTools: {
      mode: 'detach'
    },
    show: true
  });

  return nightmare
    .goto('http://google.com')
    .end(() => {
      return true;
    })
}

关于javascript - Nightmare 循环内循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42857500/

10-09 17:40