2017-03-17 4 views
1

je code suivant:Nightmare itérer dans la boucle

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

Je rugging cette application électronique à l'intérieur. Cependant cela s'exécute async et je reçois instantanément la sortie en console (0, 1,2,3,4,5,6,7,8,9) et le cauchemar ouvre toutes les 10 fenêtres en même temps! Comment exécuter le code suivant synchorous? Je voudrais obtenir le résultat suivant:

faire tandis que le compteur < valeur (par exemple 10)

1) compteur = 0

2) travaux nighmare

3) fin de cauchemar, contre ++


1) counter = 1

2) travail cauchemar

fin cauchemar

3), le compteur ++

E.T.C.

+0

'vous attendent nightmare', Quoi qu'il en soit, ne pas ajouter un accroc à votre test, car cela signifiera que le test passera toujours, ce qui le rendrait inutile, ce qui signifie essentiellement que vous pourriez aussi bien ne pas écrire de tests. –

+0

sans fonction de rattrapage, cauchemar ne va pas courir :(J'ai déjà essayé –

+0

Ensuite, vous savez que votre test est faux, ou votre code est faux.Mais dans ce cas, probablement le test.Vous lui dites de charger une page, puis cliquez sur un bouton, sans attendre le chargement de la page - Vous venez d'enlever votre code, ce qui n'est pas vraiment le standard SO, mais ajoutez un 'wait (' button-selector ') 'avant de cliquer dessus –

Répondre

0

Je pense que vous pouvez faire quelque chose comme ça à la place ou en boucle:

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

Pour ce faire DoIt sûr retours 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; 
    }) 
} 
+0

Fonctionne comme Charme! Btw, pourrait-il être possible de travailler avec mon cycle de boucle «pour»? Comment? –

+0

Non, vous ne pouvez pas travailler avec for-loop, car il n'attend pas la fin de l'itération précédente – dfsq

+0

pourriez-vous s'il vous plaît aussi expliquer comment comprendre quand utiliser promesse? Je n'ai pas trouvé sur les promesses au guide github cauchemar –