簡體   English   中英

如何在ng2中實現此承諾方案?

[英]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;
 }
}

}

ObservableObservable的情況下,您可以將Observable.mergerObservable.formJoin等加入您的2個Observable.formJoin並對其進行訂閱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM