2017-10-17 3 views
3

終わりました?実行レゾルバ角度2+で次々

+0

いいえ、ありません –

+0

あなたがしようとしていることは何でも。より良い方法があります。 – Carsten

+0

これは 'foo'と' bar'が何であるか、なぜこの順序で解決されるべきかによって異なります。しかし、一般的に、これはfooとbarを含むオブジェクトに解決するFooBarResolverで実現できます。 – estus

答えて

5

リゾルバは並行して解決されます。 FooBarを直列に解決する場合は、FooBarリゾルバである必要があります。彼らは他の路線に単独で使用されるようになっている場合は、FooBarFooBarリゾルバをラップすることができます:それは約束またはFooBarから返された観察可能な場合

class FooBarResolver implements Resolve<{ foo: any, bar: any }> { 
    constructor(
    protected fooResolver: FooResolver, 
    protected barResolver: BarResolver 
) {} 

    async resolve(route): Promise<{ foo: any, bar: any }> { 
    const foo = await this.fooResolver.resolve(route); 
    const bar = await this.barResolver.resolve(route); 

    return { foo, bar }; 
    } 
} 

FooBarは事実を認識する必要がありますそれらを適切に解決するためにそれ以外の場合は、await Observable.of(this.fooResolver.resolve(route)).toPromise()のような安全装置を追加する必要があります。

FooBarおよびFooまたはまたはBarは、重複した解像度になるため同じルート内には表示されません。

+0

これは動作し、私のコードを再利用できるようにします。どうもありがとう! –

+1

よろしくお願いいたします。 – estus