2017-11-11 138 views
0

在TypeScript 2.5.3中,我有一堆selenium WebElements,它们是链接。我需要在一个字符串数组中获取它们的目标。从C#Caming我会使用Linq与.Select()本身返回选择器返回类型的列表。在打字稿这似乎并没有这么好工作:在TypeScript中返回不同类型的数组

let categoryLinkElements = await this.driver.findElements(By.css('ul li a')); 
    let categoryLinks = categoryLinkElements.filter(async linkElement => await linkElement.getAttribute('href')); 

categoryLinkElementsWebElement数组。 linkElement.getAttribute('href')返回Promise<string>。原因使用await,我期望categoryLinks是一个字符串数组,就像在C#中List.Select()的行为一样。相反,categoryLinksWebElement[]

为什么?我怎样才能获得正确的返回值?

+1

..如果在href的是你应该使用地图。现在你只是过滤出有href falsy的元素。 – toskv

回答

0

Array.filter在这里看起来不对,它应该用来返回与输入数组相同的值,但是有一些过滤条件。相反,Array.map是C#中List.Select的正确等效项。

预期以下工作:

let categoryLinks = categoryLinkElements.map(async linkElement => await linkElement.getAttribute('href')); 

由于打字稿和JavaScript的初学者来说,这似乎是一个愚蠢的问题之后...对不起:您使用的过滤器/

+1

这里要小心'categoryLinks'将是'Promise '而不是'string'的数组; – JKillian

+0

@JKillian是正确的,你应该添加一个调用来减少 –