async-await - JavaScript - 如何将变量从一个异步函数传递到另一个?
问题描述
我花了好几个小时试图弄清楚这一点,但画了一个空白。
我需要将一个数组从一个异步函数传递给另一个。问题是,我对整个 async/await 世界都很陌生。
我的代码如下。我需要将元素传递给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);
}
async function step2(elems){
for (var i = 0; i < 2; i++) {
if(elems[i] == char1){
await driver.findElement(By.xpath("/html/body/div/div[" + i + "]")).click().then(function(res, err){
if(err){ reject(err); };
});
break;
}
}
}
并且仅将 await 与 step1 功能一起使用:
await step1();
那是因为我们step2(elems)
从 step1 函数返回了另一个 Promise。因此,await 关键字将不得不等待 step1 和 step2。请记住,当您调用异步函数时,您总是会得到一个承诺。
推荐阅读
- c - 函数,它返回指向 C 中指向 int 的指针的指针
- mongodb - MongoDB对分页结果应用排序
- java - 在java中返回相同的公共IP地址
- jsf - Websphere:java.lang.IllegalStateException:没有为此应用程序配置工厂
- php - PHP中变量之间的换行符
- apache-spark - 如何在pyspark数据框中读取scylladb表
- c# - 从数据库加载时出错。用户未与受信任的 SQL Server 连接关联
- c# - 在“Web API 重定向 (URI)”中获取查询字符串参数
- c++ - 如何以编程方式从 PKCS7 中提取 CA、多个 CA 和公共证书/密钥?
- azure-active-directory - 无法创建获取 OpenId 配置