AsyncGenerator.prototype.throw()
AsyncGenerator
实例的 throw()
方法的作用就好像在生成器主体的当前挂起位置插入了一条 throw
语句,该语句向生成器通知错误情况并允许其处理错误,或者执行清理并自行关闭。
¥The throw()
method of AsyncGenerator
instances acts as if a throw
statement is inserted in the generator's body at the current suspended position, which informs the generator of an error condition and allows it to handle the error, or perform cleanup and close itself.
语法
参数
返回值
¥Return value
如果抛出的错误没有被捕获,它将返回一个 Promise
,它会拒绝传入的异常。
¥If the thrown error is not caught, it will return a Promise
which rejects with the exception passed in.
如果异常被 try...catch
捕获并且生成器恢复生成更多值,它将返回 Promise
,该 Promise
解析为具有两个属性的 Object
:
¥If the exception is caught by a try...catch
and the generator resumes to yield more values, it will return a Promise
which resolves with an Object
with two properties:
示例
使用 throw()
¥Using throw()
以下示例显示了一个简单的生成器以及使用 throw
方法引发的错误。像往常一样,错误可以被 try...catch
块捕获。
¥The following example shows a simple generator and an error that is thrown using the throw
method. An error can be caught by a try...catch
block as usual.
// An async task. Pretend it's doing something more useful
// in practice.
function sleep(time) {
return new Promise((resolve, reject) => {
setTimeout(resolve, time);
});
}
async function* createAsyncGenerator() {
while (true) {
try {
await sleep(500);
yield 42;
} catch (e) {
console.error(e);
}
}
}
const asyncGen = createAsyncGenerator();
asyncGen.next(1).then((res) => console.log(res)); // { value: 42, done: false }
asyncGen
.throw(new Error("Something went wrong")) // Error: Something went wrong
.then((res) => console.log(res)); // { value: 42, done: false }
规范
Specification |
---|
ECMAScript Language Specification # sec-asyncgenerator-prototype-throw |
浏览器兼容性
BCD tables only load in the browser
也可以看看
¥See also