gpt4 book ai didi

javascript - 可以使用 Node.js 中的传递/帮助函数调用异步生成器吗?

转载 作者:行者123 更新时间:2023-11-30 20:20:02 25 4
gpt4 key购买 nike

我能做什么

我发现异步生成器模式对于 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 稳定版本的一些不幸的产物,但我希望它是我可以修复的东西

这是否有错误或解决方法?

最佳答案

请注意,我在玩具应用程序中只使用过几次生成器,您遇到的情况基本上是从一个生成器到另一个生成器的委托(delegate)。由于您要做的是将控制权完全“传递”给子生成器,因此您可以使用 yield* 而不是 yield。它的基本意思是,“产生你能从这个生成器得到的一切”。所以:

formButtons = async function*() {
yield* await formElements("button-container-css", "button-css", 6);
}

关于javascript - 可以使用 Node.js 中的传递/帮助函数调用异步生成器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51545048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com