JavaScript-如何将变量从一个异步函数传递给另一个异步函数?

问题描述 投票:1回答:2

我花了好几个小时试图弄清楚这个问题,但还是空白。

我需要将数组从一个异步函数传递给另一个异步函数。问题是,对于整个异步/等待世界,我还是一个新手。

我的代码在下面。我需要将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();
async-await
2个回答
0
投票

在函数外部定义元素。


0
投票

您可以将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
© www.soinside.com 2019 - 2024. All rights reserved.