![](/img/trans.png)
[英]Is there a benefit to using Typescript Async/Await over Promises?
[英]Typescript, promises, and async await confusion
我正在用 Typescript 编写代码,但在使用缺少同步函数/方法的库时遇到了麻烦。 我只需要等待一个承诺得到解决,我找不到这样做的合理方法。 我打算做的只是:
public someObjectMethod(): any {
externalLibrary.doSomeghing()
// wait for that something to happen
// continue doing stuff
我知道我可以使方法async
所以它返回一个Promise
然后也声明调用方法async
以便它也返回一个Promise
等等,直到我最终达到可以await
,但如果我这样做了,我'最终会得到一个对象模型,其中每个方法都是async
,每个对象都是一个Promise
。 问题是我为此使用了 Typescript,希望能够编写 OO 代码而不是 Javascript 脚本。 我不认为使用Promises
、 async
和await
会在大型 OO 模型中扩展,我真的不需要我可以从异步调用中获得的额外性能,而是需要我可以从同步调用中获得的流量控制。
所以问题是......是否有一种 - 合理的 - 方法来等待Promises
解决?
这不是一个重复的问题!
我在问在编写面向对象模型的上下文中是否有一种合理的方法来等待Promise
解决。 将调用跟踪中的所有函数更改为async
,然后在各处处理Promises
并不是解决此问题的合理方法。 我需要知道是否有一种方法可以在每次遇到没有同步实现的库时只等待Promise
解决而不是更改一半代码的签名。
一旦你调用异步代码——无论是使用“回调地狱”、承诺、异步/等待(承诺周围的语法糖),甚至是 Monadic 的东西(这是一个肮脏的词吗?)——恐怕你会陷入困境异步代码。
如果您愿意,您可以在回调语法和 Promise 之间进行转换。
function foo(cb: (err: any, value: string) => void): void {
doSomethingPromisey()
.then(
(value) => cb(null, value),
cb
);
}
foo((err: any, value: string) => {
if (err) {
// Do something with the error here.
// Note that throwing an error will just cause a Promise rejection - once you're in a Promise chain, there's no escaping!
throw new Error("It didn't work :(");
} else {
console.log(value);
}
});
但这不是你想要的。
我认为您的选择是:
根据我的经验,在 OO 代码中使用 promise 没有什么可担心的。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.