我目前正在尋找轉換使用Q.defer()承諾處理使用ES6承諾的庫。我理解如何將Q.defer()轉換爲Promise的基礎知識,但我遇到的每個示例都沒有討論我正在運行的結構,我需要將類實例變量從Q.defer()轉換爲承諾不會立即解決。例如,採取以下代碼。如何將Q.defer()轉換爲實例變量的Promise?
import 'Q' from 'q';
class Service {
constructor() {
this.items = Q.defer();
// This would then make a call to some backend service... setTimeout to simulate.
setTimeout(() => {
this.items.resolve(['one', 'two', 'three']);
}, 1000);
}
getItems() {
return this.items.promise;
}
}
我想使用這個類,如下所示。
let service = new Service();
service.getItems().then((items) => {
console.log(items);
});
目前,我正在看,你應該使用Promise.resolve()創建一個類似的結構,但是,如果我更換Q.defer()與Promise.resolve(),承諾沒有立即解析項目,這不是我想要的。這是我想的可能是替代品。
class Service {
constructor() {
this.items = Promise.resolve();
// This would then make a call to some backend service... setTimeout to simulate.
setTimeout(() => {
this.items.then(() => {
return ['one', 'two', 'three'];
});
}, 1000);
}
getItems() {
return this.items;
}
}
這不會起作用,因爲承諾立即解決...
如何轉換上面的代碼中使用的承諾?
我的目標是能夠立即撥打'''getItems'''。我將更新我的原始問題,以概述我希望如何使用這個課程,但這不適用於您提供的示例。我非常感謝您的反饋。 –
@TravisTidwell您是否嘗試過建議的代碼? – robertklep
我剛剛嘗試過,看起來好像這可能會起作用。我覺得你需要調用'''Promise.resolve()'''以獲得''''then'''方法來使用。我將把它插入我的圖書館,然後upvote如果它的工作!謝謝。 –