无法获得长度

时间:2017-10-13 04:50:09

标签: javascript protractor

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

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

第3次输出=未定义

3 个答案:

答案 0 :(得分:2)

由于您的all()是异步通话,因此console.log将在您完成then链并将值分配给length之前运行

答案 1 :(得分:1)

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

这会导致所谓的竞争条件 - 操作顺序可能未定义。

答案 2 :(得分:1)

所有答案之前已经解释了会发生什么以及为什么。很明显,您的第console.logthen()会在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); 条件完成之前执行。

您可以尝试的是:

then()

但是,在Sub generate_data() Application.CutCopyMode = False Sheets("Output").Activate With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _ "ODBC;DSN=HKGHKGT_UBET;Description=HKGHKGT_UBET;UID=SiuH;Trusted_Connection=Yes;APP=Microsoft Office 2016;WSID=HKHKDNO304NB;DATABASE=" _ ), Array("UBet")), Destination:=Range("$A$1")).QueryTable 'CommandType = 0 .CommandText = Array("select * from UBet..cathy_fin where duns_no in(" & Sheets("Main").Range("A2").Value & ") order by stmt_date desc") .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .ListObject.DisplayName = "HKGHKGT_UBET" .Refresh BackgroundQuery:=False End With ActiveSheet.ListObjects("HKGHKGT_UBET").TableStyle = "" Columns("B:B").Select Selection.NumberFormat = "m/d/yyyy" End Sub 语句中保留第3个console.log()将是更合适的解决方案。