噩梦在循环内迭代
Nightmare iterating inside loop
我有以下代码:
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),而噩梦同时打开所有 10 windows!
如何同步执行以下代码?
我想得到以下结果:
在计数器 < 值(例如 10)时执行
1) 计数器 = 0
2) 噩梦般的工作
3) 噩梦结束,反击++
1) 计数器 = 1
2) 噩梦般的工作
3) 噩梦结束,反击++
e.t.c.
我认为你可以做类似这样的事情或 for-loop:
(function iteration(i) {
if (i < 10) {
DoIt(i).then(() => iteration(i + 1))
}
})(0)
为此请确保 DoIt
returns 承诺:
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;
})
}
ES2017:你可以将异步代码包装在一个函数中,返回一个 promise(Nightmare returns promise)。
然后在 for 循环中调用函数,但使用神奇的 Await 关键字。 :)
function DoIt(i) {
const Nightmare = require("nightmare");
var nightmare = Nightmare({
openDevTools: {
mode: "detach"
},
show: true
});
return nightmare.goto("http://google.com").end(() => {
return true;
});
}
(async () => {
for (let i = 1; i <= 10; i++) {
await DoIt(i);
}
})();
我有以下代码:
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),而噩梦同时打开所有 10 windows!
如何同步执行以下代码? 我想得到以下结果:
在计数器 < 值(例如 10)时执行
1) 计数器 = 0
2) 噩梦般的工作
3) 噩梦结束,反击++
1) 计数器 = 1
2) 噩梦般的工作
3) 噩梦结束,反击++
e.t.c.
我认为你可以做类似这样的事情或 for-loop:
(function iteration(i) {
if (i < 10) {
DoIt(i).then(() => iteration(i + 1))
}
})(0)
为此请确保 DoIt
returns 承诺:
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;
})
}
ES2017:你可以将异步代码包装在一个函数中,返回一个 promise(Nightmare returns promise)。
然后在 for 循环中调用函数,但使用神奇的 Await 关键字。 :)
function DoIt(i) {
const Nightmare = require("nightmare");
var nightmare = Nightmare({
openDevTools: {
mode: "detach"
},
show: true
});
return nightmare.goto("http://google.com").end(() => {
return true;
});
}
(async () => {
for (let i = 1; i <= 10; i++) {
await DoIt(i);
}
})();