我感兴趣的是使用生成器+承诺模式,其中promise将遍历生成器,解析每个产生的值,并将其传递回生成器。一旦完成,承诺将以最终回报(如果有)结束。
我在this page的底部找到了promisejs.org提供的一个优雅的实现,但是经过一段时间的研究后,我觉得这对于长期运行或无限生成器来说会是内存泄漏。我希望得到纠正。
我通过删除错误检查并使用箭头函数来简化它,以便简化:
function async(generator){
function handle(result) {
return result.done
? Promise.resolve(result.value)
: Promise.resolve(result.value)
.then(res => handle(generator.next(res)));
}
return handle(generator.next());
}
在我看来,handle
的每次迭代都返回一个新的承诺,在发生器完成之前不会解决,然后它们都会级联起来。是这样的,如果是这样的话意味着这会因为足够的迭代而崩溃吗?