為什麼 js 中的 getter setter 不支援 async?

時間 2021-05-07 07:56:17

1樓:啦啦啦我賣報的小行家

很難理解為什麼要支援async,這明明是兩碼事。。。

getter setter的設計本意就是抽象出值獲取和設定操作,至於值是什麼,什麼時候能給,那是你拿值任務的事;如果不區分的一股腦加上去,請問你是不是還要處理異常,處理各種狀態,那是不是就違反了單一原則,說實話, 本身給setter getter 加async就是屬於設計違例的錯誤思路 @方應杭

2樓:undefined

不說其他的哦,在getter裡面弄非同步,總覺得怪怪的,有哪門計算機語言是這麼玩的麼?

我就是想給記憶體設定乙個屬性而已,為啥要非同步,是不是有點設計過度了?

3樓:陶文

我司用 typescript transformer 實現了乙個 async getter。當呼叫 a.b 的時候自動加 yield,前提是 a 具有乙個特殊的型別,要不然就無法區分什麼時候要加這個 yield 了。

有了 async getter 之後,angular 的 rxjs 資料流就可以用 getter 套 getter 來表達了。例如

get recentPosts查資料庫

return this.scene.query(Post);

}get recentPostsCount()

4樓:紫雲飛

這是語言設計者有意而為之的,https://github.com/tc39/ecmascript-asyncawait/issues/15#issuecomment-43540836

他們認為屬性讀取不應該是非同步的,所以並不是技術上實現不了。也有人給 TypeScript 提過 async getter 的建議,當然也被拒絕了 https://

github.com/microsoft/TypeScript/issues/14982,還有更早的有人解釋了 C# 裡不支援非同步屬性的原因 https://

,也是同樣的。

5樓:Tianfan

class

Foo}

}不知道你想實現什麼功能,但是 get 時候非同步取到,是不可能的需求。

就像請「畫出true 變化false的函式 」一樣。

6樓:胡小濺

不是說不支援,只是這種語法不支援。你願意的話還是可以這麼寫:

const

obj=

{};Object

.defineProperty

(obj

,'foo'

,});

console

.log

(obj

.foo

);// Promise

console

.log

(await

obj.

foo);

// foo

但本質上 async 只不過是 Promise 的一種簡便寫法而已。你如果不想這麼寫,一定要用物件字面量或者 class 的話直接返回乙個 Promise 也沒差。

js中let與for迴圈輸入問題,為什麼輸出結果如下?

kkkKKKi 因為物件是引用基本型別,你可以把它理解成每次呼叫的時候都是使用的同乙個物件,因為這幾個物件共用乙個記憶體位址,所以最後無非就是同乙個物件用了兩次而已。陣列物件用的都是同乙個物件,當然資料就是一樣的了 善思即行 這裡不涉及作用域相關,主要是涉及到對引用型別變數改變問題。按題主的想法,出...

JS中的作用域鏈是在什麼時候建立的?

前端小胖 作用域鏈說白了就是作用域的集合 子集可以訪問父集,父集不能訪問子集 1 函式在執行的過程中,先從自己內部尋找變數2 如果找不到,再從建立當前函式所在的作用域去找,從此往上,也就是向上一級找。案例 function fn fn2 fn1 fn JS作用域分為兩種一種是區域性 function...

網頁 head 標籤中的 JS 和 CSS,哪種檔案放在前面,哪種放在後面比較好?

Morning 不同意因為js指令碼會阻塞dom構建的原因,而將js指令碼放在末尾。Edit fiddle JSFiddle 就算放在末尾了,也一樣會阻塞dom的構建。 吳釗 說的是對的,以色列的開發人員加希尓在翻閱了現代瀏覽器核心原始碼以後,寫了一文 現代瀏覽器工作原理 瀏覽器中分主副解析引擎。h...