filterdList.length值总是等于具有以下代码的元素总数。所以这个方法总是返回false。表中只有一个项与给定名称匹配。
async itemExists(name) : Promise<boolean>{
const itemList = await element.all(this.itemList)
const filterdList= await Promise.all(itemList.filter( async (item) =>{
let text = await item.getText();
if (text == name) {
return true;
}
}));
return await filterdList.length == 1;
}
调用此方法如下
console.log(await itemExists('unique item name'));
答案 0 :(得分:3)
await
只需在async
函数
async function itemExists(name) {
const itemList = await Promise.all(element.all(this.itemList)
.map(item => item.getText()));
const filterdList = itemList.filter(item => text === name);
return filterdList.length == 1;
}
itemsExists(name).then(bool => console.log(bool));
async function itemExists(name) {
const itemList = await Promise.all(['unique item name', 'not unique item name'].map(item => Promise.resolve(item)))
const filterdList = itemList.filter(item => item == name);
return filterdList.length === 1;
}
itemExists('unique item name').then(bool => console.log(bool));
&#13;
答案 1 :(得分:2)
这一行有各种错误:Promise
首先,您似乎想要返回boolean
,而不是await
。如果这是您的目标,请不要在该语句中使用await关键字。其次,你不能boolean
一个await
。您只能在Promise
个实例上使用var list = await filterdList
。相反,您可以执行list
之类的操作,然后您可以稍后检查console.log
的长度。
我建议从头开始重建此方法,并进行测试
一路上Promise.all
陈述。它将使您更好地了解出错的地方和地点。关于你传递给var itemNames = await Promise.all(itemList.map(item => item.getName()))
itemNames.filter(...).length
的内容要特别小心。如果它不是一个Promises数组,那么它就不会表现得正确。
在所有Promise都解决之前,您可能不应该过滤数组。您可以获取所有名称,然后过滤。下面的行将输出已解析的项目名称,您可以对其进行过滤。
import re
data = re.findall("\<(.*?)\>", string)