gpt4 book ai didi

typescript - 将 Promise 与 async/await 结合使用

转载 作者:搜寻专家 更新时间:2023-10-30 20:55:25 27 4
gpt4 key购买 nike

我从 TypeScript 中的 async/await 开始,对此我几乎没有疑问。我编写此函数是为了从 Blob 获取 ArrayBuffer。

async function readAsArrayBuffer(blob: Blob): Promise<ArrayBuffer> {
return new Promise<ArrayBuffer>((resolve, reject) => {
let reader = new FileReader();
reader.addEventListener('load', e => resolve((<FileReader>e.target).result));
reader.addEventListener('error', e => reject((<FileReader>e.target).error));
reader.readAsArrayBuffer(blob);
});
}

所以...

  1. 我真的需要在这个函数之前使用 async 关键字吗?我想,它什么也没做...
  2. 我应该在 Promise 执行程序函数范围内还是在 readAsArrayBuffer 范围级别创建新的 FileReader? (...或者没关系?)
  3. 我写的是两个嵌套在function中的函数nested in function。难道我做错了什么? :-)

最佳答案

Do I really need async keyword before this function? I think, it does nothing...

没有。只有在函数体内使用 await 时,您才真正需要 async 关键字。

Should I create new FileReader in Promise executor function scope or at readAsArrayBuffer scope level? (...or it doesn't matter?)

我建议将大部分实际代码保留在执行程序函数中。优点是,如果您有一个同步异常(例如,如果new FileReader() 在构造时throw),执行器将捕获该异常并将其变成异步 promise 拒绝。如果你把它放在执行函数之外,那么你的函数会抛出一个同步异常。这使用起来会造成混淆,因为您必须分别处理同步和异步异常。

What I wrote is two functions nested in function nested in function. Am I doing something wrong? :-)

没关系。当您围绕非 promise API 编写 promise 包装器时,这是一种非常常见的模式。优点是您现在可以将此包装器与 await 一起使用,并避免在代码的其他部分使用嵌套函数。 :-)

关于typescript - 将 Promise 与 async/await 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45536774/

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