我正在努力理解如何使用生成器函数和迭代器来实现我正在考虑编写的库的各种设计选项。
通过简单的生成器功能后,我现在正在努力解决互联网上的示例如何将生成器与Promises集成。
一个问题是所有文章都是在ES2015规范Promise可用之前编写的,它们都使用了3个方库,我不知道它们的细微差别。
所以我真的不明白的问题是,如果你产生并且生成器函数调用.next(Promise返回函数),一旦调用.next函数,或者返回的promise时,语句会超出yield。解析。这些例子似乎暗示它等到Promise结算,但我没有看到原因的逻辑。
答案 0 :(得分:3)
生成器函数调用.next(Promise返回函数)
不,不。生成器需要由某个东西驱动,它不会自行运行。
只要调用.next函数,是否会继续超出yield的语句
是。这与你所屈服的价值无关,无论是否是承诺。
为了获得预期的行为,.next()
仅在产生的承诺满足时调用(或者在拒绝时调用.throw
),您需要像这样运行生成器。与提议的async
/ await
语法相反,生成器不会自己执行此操作。这就是所有第三方图书馆的用武之地:你不想自己写这些东西(你也不想在任何地方重复自己,也不可能在第一次尝试时把它弄好)。