【发布时间】:2018-07-26 18:05:27
【问题描述】:
我能做什么
我发现异步生成器模式对于 JavaScript 来说是相当新的,并且仅在 Node.js 版本 10 中可用。所以在我完成所有这些之后,我现在可以使用以下函数在 Web 中生成多个相似的元素使用 Selenium 的页面,它的许多功能使用 async/await:
formElements = async function*(containerCss, childCss, defaultCount) {
let countCSS = containerCss + " " + childCss;
let numElements = await countCss(countCSS) || defaultCount;
for (let cIndex = 1; cIndex <= numElements; cIndex++) {
let elementCss = containerCss + ":nth-child(" + cIndex + ") " + childCss;
yield await elmCSS(elementCss);
}
}
使用此调用,此函数可以作为异步生成器正常工作:
for await (const button of formElements("button-container-css", "button-css", 6))
{
await clickOn(button);
//other async stuff...
}
我想不通
但我想做的是将这些特定参数从主函数中取出,并有一个辅助函数 (formButtons()) 来提供它们,我认为它应该看起来像这样 (?):
formButtons = async function*() {
yield await formElements("button-container-css", "button-css", 6);
}
所以我的主要功能可以是一个小清洁工:
for await (const button of formButtons())
{
await clickOn(button);
//other async stuff...
}
但是一旦碰到formButtons() 中的yield,它实际上会跳过所有内容,返回 null 并导致错误。我认为错误一定是在我的 formButtons() 函数中,或者它是不使用 Node 的稳定版本的一些不幸的工件,但我希望这是我可以修复的东西
是否有错误或解决方法?
【问题讨论】:
-
我对生成器没有经验,但这是您需要
yield*的情况吗? -
@Pointy 花了我一点时间来弄清楚你的意思并尝试一下,但是是的 - 将其添加为答案(可能带有链接:-P),我会接受它: -)
-
已添加答案。希望我得到的解决方案与您最终得到的解决方案相同:)
标签: javascript node.js selenium async-await yield-return