2017-10-12 1 views
0

J'ai une fonction qui ouvre une instance de sélénium webdriver, puis une autre fonction qui va récupérer quelques informations et ensuite diriger le webdriver vers un URl. J'ai utilisé une promesse car j'étais amené à croire que la deuxième fonction attendrait que la première se termine avant d'exécuter la seconde. Voici mon code de référence:Promesse Javascript n'attendant pas que la fonction asynchrone soit complétée

function function1(){ 
    let driver = new Builder() 
    .forBrowser('firefox') 
    .build(); 
    driver.get(url); 

    return new Promise((resolve, reject)=>{ 
    resolve('Browser Opened') 
    }) 

} 

function function2(){ 
    ** code to create URL ** 
    driver.get(urlCreated); 
} 

function1().then(function2); 

C'est donc le code, j'étais fonction attend 2 d'attendre jusqu'à ce que la fonction 1 à remplir avant exécuté mais ce n'est pas le cas, je comprends mal les promesses? Quelqu'un peut me diriger dans la bonne direction? Merci à l'avance

+0

Ne pas utiliser 'nouvelle promesse()' ** moins ** vous promis une API existante basée sur les callbacks (voir le [antipathtern de construction de promesse explicite] (https://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how- do-i-avoid-it)). Si vous voulez créer une promesse résolue, utilisez 'return Promise.resolve ('Browser Opened');' – Tomalak

+0

Dans le contexte de Selenium, lisez https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs et envisagez de déplacer votre code à async/await. – Tomalak

Répondre

2

driver n'est pas return ed de function1

function function1() { 
    return new Promise((resolve, reject)=>{ 
    let driver = new Builder() 
    .forBrowser('firefox') 
    .build(); 
    driver.get(url); 
    resolve(driver); 
    }) 
} 

function function2(driver) { 
    driver.get(urlCreated); 
} 

function1().then(function2); 
+0

Merci beaucoup, cela a résolu le problème :) –

0

Vous manque une fermeture } sur function1

function function1(){ 
    let driver = new Builder() 
    .forBrowser('firefox') 
    .build(); 
    driver.get(url); 

    return new Promise((resolve, reject)=>{ 
    resolve('Browser Opened') 
    }) 
} 

function function2(){ 
    ** code to create URL ** 
    driver.get(urlCreated); 
} 

function1().then(function2); 
+0

qui était une erreur lors de la frappe, mon erreur –

+0

@HarveyLewis ah ok, dans ce cas, c'est un problème de portée. Function2 n'a aucune référence à 'driver'. – Nick