我花了好几个小时试图弄清楚这个问题,但还是空白。
我需要将数组从一个异步函数传递给另一个异步函数。问题是,对于整个异步/等待世界,我还是一个新手。
我的代码在下面。我需要将elems传递给step2函数
var selenium = require('selenium-webdriver');
var Builder = selenium.Builder;
var By = selenium.By;
var Key = selenium.Key;
var util = selenium.util;
var firefox = require('selenium-webdriver/firefox');
var http = require('http');
var querystring = require('querystring');
async function startBot() {
var driver = await new Builder().forBrowser('firefox').build();
await driver.get('randomSite');
if(true){//Putting this here as it may have to do with scope. I am not sure
async function step1(){
for(var p=0; p <5 ; p++){//elems is undefined
var elem1 = await driver.findElement(By.xpath("/html/body/div/div[1]")).getText();
var elem2 = await driver.findElement(By.xpath("/html/body/div/div[2]")).getText();
var elems = [elem1, elem2]; //How do I pass this array to tge step2 funtion?
}
}
if(true){//Putting this here as it may have to do with scope. I am not sure
var char1 = 1;
var char2 = 2;
//button1
async function step2(){
for (var i = 0; i < 2; i++) {
if(elems[i] == char1){//elems is undefined
await driver.findElement(By.xpath("/html/body/div/div[" + i + "]")).click().then(function(res, err){
if(err){ reject(err); };
});
break;
}
}
}
await step1();
await step2();
}
}
};
startBot();
在函数外部定义元素。
您可以将elems数组作为参数传递给step2函数。但是,您必须进行一些修改:
async function step1(){
for(var p=0; p <5 ; p++){
var elem1 = await driver.findElement(By.xpath("/html/body/div/div[1]")).getText();
var elem2 = await driver.findElement(By.xpath("/html/body/div/div[2]")).getText();
var elems = [elem1, elem2];
}
return step2(elems); // this will return a promise
}
async function step2(elems){
for (var i = 0; i < 2; i++) {
if(elems[i] == char1){//elems is undefined
await driver.findElement(By.xpath("/html/body/div/div[" + i + "]")).click().then(function(res, err){
if(err){ reject(err); };
});
break;
}
}
}
并且仅在第1步中使用await:
await step1(); // this will await for both step1 and step2