Javascript 如何在异步生成器函数中抛出错误

Javascript 如何在异步生成器函数中抛出错误,javascript,typescript,asynchronous,error-handling,yield,Javascript,Typescript,Asynchronous,Error Handling,Yield,在Javascript中的异步生成器函数中,第一个参数本身就是一个异步生成器函数,该函数用于转换函数。 在函数中有一个转换和一个检查。如果检查不正确,应中止发电机功能。如果检查正确,则应得出结果。我用随机数模拟了误差 我找到了三种抛出错误的方法: 返回承诺。拒绝(新错误(“某些消息”) 抛出新错误(“某些消息”) 拒绝(新错误(“某些消息”) 导出异步函数*transformAsync( 资料来源:AsyncGenerator, ) { 用于等待(源的常量行){ const transfor

在Javascript中的异步生成器函数中,第一个参数本身就是一个异步生成器函数,该函数用于转换函数。 在函数中有一个转换和一个检查。如果检查不正确,应中止发电机功能。如果检查正确,则应得出结果。我用随机数模拟了误差

我找到了三种抛出错误的方法:

  • 返回承诺。拒绝(新错误(“某些消息”)
  • 抛出新错误(“某些消息”)
  • 拒绝(新错误(“某些消息”)
导出异步函数*transformAsync(
资料来源:AsyncGenerator,
) {
用于等待(源的常量行){
const transformedLine=transformWithSomeMagic(line);
if(Math.random()>0.8){
返回承诺。拒绝(新错误(“某些消息”);
//或
抛出新错误(“某些消息”);
//或
拒绝(新错误(“某些消息”);
}
产量转化系;
}
}

所有的结果都是相同的。我想知道区别在哪里,在使用streams作为源参数时是否存在泄漏,因为它们是兼容的。

是的,它们都是相同的。没有泄漏,所有泄漏都会关闭
迭代器(在迭代器上调用
.return()


您应该使用简单的
抛出新错误(…)
对于自己显式抛出错误,其他形式在调用承诺返回函数和时非常有用。

无论是
抛出
还是
返回
,在
for.
循环中,迭代器都将关闭(无论是同步还是异步)

从概念上讲,进一步执行异步生成器的结果表示为承诺,返回和让步类似于解决方案,抛出类似于拒绝。现在,用另一个承诺解决一个承诺会“压扁”它,因此,
Promise.reject
wrapper是多余的

        return Promise.reject(new Error("Some Message"));
        // barely equals
        resolve(Promise.reject(new Error("Some Message"))

        throw new Error("Some Message.");
        // barely equals
        reject(new Error("Some Message."));

        yield Promise.reject(new Error("Some Message"));
        // this one's more complicated, but it also barely equals
        resolve(Promise.reject(new Error("Some Message")));