2017-03-17 101 views
1

迭代我有以下代碼:夢魘內環

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; 
     }) 
} 

我rugging這裏面的電子應用。然而,這會執行異步並且我在控制檯(0,1,2,3,4,5,6,7,8,9)中立即得到輸出,而惡夢同時打開所有10個窗口!

如何執行下列代碼synchorous? 我想獲得以下結果:

做而計數器<值(例如10)

1)計數器= 0

2)nighmare工作

3)惡夢端,計數器++


1)計數器= 1

2)惡夢工作

3)惡夢端,計數器++

e.t.c.

+0

'伺機nightmare',反正不加一個抓住你的考驗,因爲這將意味着測試總是會通過,這將使它無用,這基本上意味着你不可能寫任何測試。 –

+0

沒有捕捉功能,夢魘不會運行:(我已經嘗試過 –

+0

然後你知道你的測試是錯誤的,或者你的代碼是錯誤的,但是在這種情況下,可能是測試,你告訴它加載一個頁面,然後點擊按鈕,而不用等待頁面被加載 - 你剛剛刪除了你的代碼,這不是真正的SO標準,而是在你點擊它之前添加一個「等待('按鈕選擇器')' –

回答

0

我認爲你可以做這樣的事情,而不是或環:

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

對於這個確保DoIt回報承諾:

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; 
    }) 
} 
+0

像魅力! 順便說一句,有可能使用我的'for'循環循環嗎?如何? –

+0

不,您不能使用for-loop,因爲它不會等待以前的迭代完成。 – dfsq

+0

解釋如何理解何時使用承諾?我沒有找到承諾在夢魘github指南 –