如何将 promises 集成到基于回调的项目中?
How to integrate promises into a callback-based project?
我正在开发一个主要基于回调的打字稿项目。现在我正在研究 class,我不得不使用其他方法编写一些新方法。所以我承诺了我需要的方法,并用 try/catch + async/await 编写了方法。但是我写的方法仍然将回调作为参数,并且它们 return 的承诺解析为无效,以便能够被项目的其余部分使用。
我在想更好的方法是尝试使这些新方法与回调和承诺兼容,即通过调用回调如果它被传递,而且 returning 将被传递的东西到回调中,以便将来可以以任何一种方式使用它们,作为基于回调的函数或承诺的一部分 chain/async await.
我对 return 类型在类型注释中应该是什么感到困惑。假设该方法是从数据库中获取用户。我不想在这个方法中抛出,因为它周围的项目是基于 (err, data)
回调结构,所以抛出的错误不会被捕获。所以我必须 return 一些东西,但我不确定类型注释。说 return 类型是 User | Error
好像不对?然后调用函数必须检查在运行时 returned 的类型,对吗?
不抛出错误应该如何处理?
你熟悉被拒绝的承诺吗?
处理 Promise API 错误的惯用方法是 Promise rejections, such that your returned promise would either be fulfilled with a User or rejected with an Error. This lets errors propagate try/catch style through promise chains. The same way that you would call the callback with an err
in a callback-style function, you can either return Promise.reject(err)
(docs) or throw err
from an async
function or then
handler; .
就TypeScript而言,:假设所有的Promise都可能被拒绝,并且拒绝原因可能是any
类型。我认为拒绝原因是错误是惯用的,但很像 JavaScript 中的 throw
语句,它很容易是字符串或数字。
另请参阅:
- How do I convert an existing callback API to promises?
- util.promisify 在 NodeJS
我正在开发一个主要基于回调的打字稿项目。现在我正在研究 class,我不得不使用其他方法编写一些新方法。所以我承诺了我需要的方法,并用 try/catch + async/await 编写了方法。但是我写的方法仍然将回调作为参数,并且它们 return 的承诺解析为无效,以便能够被项目的其余部分使用。
我在想更好的方法是尝试使这些新方法与回调和承诺兼容,即通过调用回调如果它被传递,而且 returning 将被传递的东西到回调中,以便将来可以以任何一种方式使用它们,作为基于回调的函数或承诺的一部分 chain/async await.
我对 return 类型在类型注释中应该是什么感到困惑。假设该方法是从数据库中获取用户。我不想在这个方法中抛出,因为它周围的项目是基于 (err, data)
回调结构,所以抛出的错误不会被捕获。所以我必须 return 一些东西,但我不确定类型注释。说 return 类型是 User | Error
好像不对?然后调用函数必须检查在运行时 returned 的类型,对吗?
不抛出错误应该如何处理?
你熟悉被拒绝的承诺吗?
处理 Promise API 错误的惯用方法是 Promise rejections, such that your returned promise would either be fulfilled with a User or rejected with an Error. This lets errors propagate try/catch style through promise chains. The same way that you would call the callback with an err
in a callback-style function, you can either return Promise.reject(err)
(docs) or throw err
from an async
function or then
handler;
就TypeScript而言,any
类型。我认为拒绝原因是错误是惯用的,但很像 JavaScript 中的 throw
语句,它很容易是字符串或数字。
另请参阅:
- How do I convert an existing callback API to promises?
- util.promisify 在 NodeJS