关于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")


本页地址:http://www.foxtable.com/webhelp/topics/6378.htm