【发布时间】:2017-10-24 22:32:18
【问题描述】:
以下代码可以正常工作。但是,我想将函数中间的 Promise 代码(由 cmets 表示)更改为 Async 代码,并将 for 循环替换为 map()。我该怎么做?
const main = async () => {
try{
const driver = await new webdriver.Builder()
.withCapabilities(webdriver.Capabilities.chrome())
.setLoggingPrefs(prefs)
.forBrowser('chrome')
.setChromeOptions(options)
.build();
// Start promise code
await driver.findElements(By.css('input'))
.then(function(elements){
for(let i=0; i<elements.length; i++){
elements[i].getAttribute("value")
.then(function(val){
console.log(val);
});
}
})
.catch(function(error){
console.log(error);
});
// End promise code
await driver.quit();
} catch (error) {
console.log(error);
}
};
main();
【问题讨论】:
-
Promise 是异步的……你已经在使用 async/await,所以不是你想改变代码来使用 async/await……所以……不能我的生活猜猜你想做什么
-
elements[i].getAttribute("value").then好吧,这看起来很时髦!我认为elements不是 DOM 元素数组 -
@JaromandaX 有问题的代码是硒代码,并不是说我对此一无所知,但实际上,我怀疑
elements是WebAPI 的Element。虽然我在任何地方都找不到这种方法会返回 Promise... -
类似
var elements = await driver.findElements(By.css('input')), values = elements.map(element => element.getAttribute('value'));` -
不过,我仍然不明白为什么问题要求使承诺代码异步......因为承诺代码本质上是异步的
标签: javascript selenium promise async-await es6-promise