我目前正在嘗試在構造函數中使用回調運行異步函數。然後我需要從回調中獲取數據,並在創建類的實例時使用它。我的代碼目前看起來是這樣的:在異步回調中調用超級
class Foo extends Bar {
constructor(data) {
someAsyncCall((response) => {
data.a = response;
super(data);
});
}
}
任何幫助是極大的讚賞:)
我目前正在嘗試在構造函數中使用回調運行異步函數。然後我需要從回調中獲取數據,並在創建類的實例時使用它。我的代碼目前看起來是這樣的:在異步回調中調用超級
class Foo extends Bar {
constructor(data) {
someAsyncCall((response) => {
data.a = response;
super(data);
});
}
}
任何幫助是極大的讚賞:)
在我看來,我不會做它在構造函數中。使用Q庫和另一個輔助類作爲數據訪問層。
HelperClass.getFooById(id)
.then(function (data) {
return new Foo(data);
})
的getFooById
方法將使用Q.defer()
並稱之爲Q.resolve(data)
一旦數據被解決。
如果您在構造函數內部執行此操作,即使您已經有數據,也不會創建該類的實例而不發出請求。
我不知道我會說「絕對不要在構造函數裏面做」。它意味着可以這樣使用,MDN文檔給出了例子。 – mhodges
公平點!我編輯過。 –
你能發佈一個鏈接到這些例子嗎?我很好奇他們爲什麼會推薦這樣做。 –
你的超級定義在哪裏? – Piyush
@ P.K。 super是一個ES6關鍵字.. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/super – mhodges
當異步調用被啓動時,父類已經被構建,現在調用'super'已經太晚了。有一個原因是'super'必須是構造函數中的第一個調用(或者至少在使用'this'前調用)。 – 2017-02-23 17:52:45