我正在用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
解析,而不是每次遇到没有同步实现的库时都更改一半代码的签名。
答案 0 :(得分:0)
一旦您调用异步代码-它是否使用“回调地狱”,Promise,async / await(Promises周围的语法糖)或什至是Monadic(这是一个肮脏的词吗?)-恐怕您是停留在异步代码中。
如果愿意,可以在回调语法和Promises之间进行转换。
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不必担心。 :)