我目前正在寻找转换使用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如果它的工作!谢谢。 –