【问题标题】:Unable to get the length无法获取长度
【发布时间】:2017-10-13 17:04:49
【问题描述】:

我是 javascript 概念的新手。 为什么我得到相同变量 length 的不同输出? 虽然它在体内显示预期的结果?

var length;
element.all(by.className("className")).getText().then(function(items){
    length = items.length;
    console.log("1st output = "+length);//1
    console.log("2nd output = "+items.length);//1
});
console.log("3rd output = "+length);//undefined

输出:- 第一个输出 = 1

第二个输出 = 1

第三个输出 = 未定义

【问题讨论】:

  • 3rd 未定义,因为它是异步调用。
  • .then.then 中的代码执行了语句console.log("3rd output = "+length) 完成它的执行并且当时length 未定义时以异步方式工作。你可以检查一下链接stackoverflow.com/questions/14220321/…

标签: javascript protractor


【解决方案1】:

因为您的all() 是异步调用,所以console.log 将在您完成then 链之前运行并将值分配给length

【讨论】:

    【解决方案2】:

    你的函数中的element.all(by.className("className")).getText())调用返回一个叫做promise的东西——它执行一些代码,在执行这段代码之后,它调用.then()里面的函数。但是,这与程序的其余部分无关,因此它会在 .then() 语句之后继续执行 console.log

    这会导致所谓的竞争条件——操作顺序可能是不确定的。

    【讨论】:

    • 我应该怎么做才能修复它。因为我想要项目的长度。
    • @shankarDayalupadhyay 你打算如何使用项目的长度?有什么方法可以在同步函数内部使用它?
    • 我想比较一下物品的长度,外面。
    【解决方案3】:

    所有之前的答案都已经解释了会发生什么以及为什么。所以很明显,您的第三个 console.log 在您的 then() 条件完成之前执行。

    你可以试试这个:

    var length;
    element.all(by.className("className")).getText().then(function(items){
        length = items.length;
        console.log("1st output = "+length);//1
        console.log("2nd output = "+items.length);//1
    });
    browser.waitForAngular();  //add this line to let Protractor wait for Async tasks to be resolved first
    console.log("3rd output = "+length);
    

    但是,将第三个 console.log() 保留在 then() 语句中将是更合适的解决方案。

    【讨论】:

    • 嗨,如果我的应用程序不是 Angular,我们可以使用 browser.waitForAngular() 吗?
    • 不,这不起作用,因为browser.waitForAngular() 解析特定角度的对象。我建议使用 async / await 作为纯 javascript 方式。无论如何,Protractor 将在未来 12-18 个月内搬到那里。 Read all about here
    • @shankarDayalupadhyay :它不起作用或者不接受答案的原因是什么?如果可以的话,我想改进它(因为您似乎还有一个未回答的问题)。
    猜你喜欢
    • 2021-12-09
    • 2015-05-11
    • 2015-03-24
    • 2018-08-27
    • 2020-06-08
    • 2012-05-04
    • 1970-01-01
    • 2014-01-02
    • 2014-04-16
    相关资源
    最近更新 更多