[英]how can I implement this promise scenario in ng2?
如何在ng2中實現此承諾方案?
export class MySpecializedClass
{
myObject;
constructor(
private myService: MyService
)
{
this.myObject = new MyObject();
}
buildMyObject()
{
this.builderMethod1();
this.builderMethod2();
}
builderMethod1()
{
this.myService.getData1()
.then(response => this.myObject.Prop1 = response.Prop1 )
}
builderMethod2()
{
this.myService.getData2()
.then(response => this.myObject.Prop2 = response.Prop2 )
}
}
export class MyConsumerClass
{
myObect;
getMyObject()
{
this.myObject = new MySpecializedClass().buildMyObject().myObject;
}
}
問題在於,在下面的代碼行中,只有在保證builderMethod1()和builderMethod2()完成之前,才應引用myObject。
MyConsumerClass.getMyObject().myObject
我希望builderMethod1()和builderMethod2()同時運行,這就是為什么它們沒有在then()中鏈接的原因。 如何使用Promises來實現此方案? 還是可觀察性或其他方法會提供更好的解決方案?
我個人覺得異步等待語法比鏈接更易讀。 也許您也會這樣做,這是使用async-await可以完成相同操作的方法:
export class MySpecializedClass
{
myObject : MyObject;
constructor(
private myService: MyService
)
{
this.myObject = new MyObject();
}
async buildMyObject()
{
const first = this.builderMethod1();
await this.builderMethod2();
await first;
return this.myObject;
}
async builderMethod1()
{
const response = await this.myService.getData1();
this.myObject.Prop1 = response.Prop1;
}
async builderMethod2()
{
const response = await this.myService.getData2();
this.myObject.Prop2 = response.Prop2;
}
}
export class MyConsumerClass
{
myObject;
async getMyObject()
{
this.myObject = await new MySpecializedClass(new MyService()).buildMyObject()
}
}
您可以退還承諾:
builderMethod2()
{
return this.myService.getData2()
.then(response => {
this.myObject.Prop2 = response.Prop2;
return response.Prop2;
})
}
您可以在promise和Observable中執行此操作。 我更喜歡觀察,因為它比承諾有更多選擇
Promise如果有Promise,您需要返回Promise / differ。 但是在您的情況下,您什么也不會退回,也沒有說什么.then
那么它就解決了諾言
導出類MySpecializedClass {myObject;
constructor(
private myService: MyService
)
{
this.myObject = new MyObject();
}
buildMyObject()
{
var diff = differed // find out exact differed object
return diff.all(this.builderMethod1(), this.builderMethod2());
}
builderMethod1()
{
return this.myService.getData1()
.then(response => this.myObject.Prop1 = response.Prop1 )
}
builderMethod2()
{
return this.myService.getData2()
.then(response => this.myObject.Prop2 = response.Prop2 )
}
}
導出類MyConsumerClass {myObect;
getMyObject()
{
this.myObject = new MySpecializedClass().buildMyObject().then (() => {
myObject;
}
}
}
Observable在Observable的情況下,您可以將Observable.merger
, Observable.formJoin
等加入您的2個Observable.formJoin
並對其進行訂閱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.