如何将 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