![](/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.