关于Await
前面提到使用内置DOM的时候,赋值不需要加Await,取值需要加Await。
其实取值是否需要加Await并不是绝对的,有些DOM属性就不需要加Await(也不能加,否则会导致崩溃):
取值时是否加Await的使用原则:
1. 若属性返回基础值类型(如字符串、布尔值、数字),必须加Await;
2. 若属性返回集合或元素对象,绝对不允许加Await
所以以下属性禁止加Await,因为这些属性返回的是集合:
rows
cells
tBodies
children
elements
以下属性也禁止加Await,因为这些属性返回的是元素:
parentElement
firstElementChild
lastElementChild
previousElementSibling
nextElementSibling
同样的道理,通过集合获取指定索引的元素,也禁止加Await的,例如:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Dim
tbl = wv.querySelector("#employeeTable")
'查询元素
Dim
allRows = tbl.rows
'获取行集合,不要用Await
Dim
empRow = allRows(2)
'获取指定索引位置的行,不要用Await
Dim
salaryCell = empRow.cells(3)
'获取指定行指定列的单元格,不要用Await
Dim
value =
Await
salaryCell.innerText
'取值要用Await
value =
value.Trim(""""c)
MessageBoxA.Show(value)
对于函数,如果有返回值,则必须加Await,否则加不加都无所谓,例如:
'''Async
Dim
wv
As
WebViewer = e.Form.Controls("WebViewer1").WebViewer
Dim
tbl = wv.querySelector("#testTable")
'检查是否有caption
Dim
oldCaption = tbl.caption
'caption属性返回的是一个元素,不要Await
If
Await
oldCaption.IsNull() =
False
Then
'IsNull函数有返回值,要用Await
'已存在caption,先删除
tbl.deleteCaption()
'
没有返回值的函数,加不加Await都无所谓
End
If
'创建新caption
Dim
newCaption =
Await
tbl.createCaption()
'函数有返回值,必须用Await
newCaption.innerHTML =
"员工信息表
-
创建于
"
& DateTime.Now.ToString("HH:mm:ss")