我已经在一个单独的类中编写了一个函数,以便在元素句柄数组的所有元素句柄中输入文本
public async enterAllElementText(elements: ElementHandle[], text: string): Promise<any> {
try {
const texts = await elements.map(async (element: ElementHandle) => {
await element.focus();
await element.type('');
await element.type(text);
await this.enterKeys('Enter');
await this.page.waitFor(500);
});
await Promise.all(texts);
} catch (Exception) {
console.error(chalk.red('\nFailed to enter Text!' + '\n' + Exception.toString()) + '\n');
process.exit(0);
}
}
然后这样称呼它:
(async() => {
const texts = await page.$$(locators.texts);
await classInstance.enterAllElementText(texts, 'someText');
console.log('All texts entered!');
})();
但是由于某种原因它无法按预期执行,我知道这是承诺执行的问题,因为console
语句总是首先执行!我在这里做什么错了?
我也知道map
和for of
应该与async一起使用,并分别等待异步函数的并行和顺序执行!