2017-10-17 6 views
3

에서 다른 하나 :실행 리졸버 다음과 같은 경로를 감안할 때 각도 2+

path: '', 
component: MyComponent, 
resolve: { 
    foo: FooResolver, 
    bar: BarResolver 
} 

첫 번째 해결 FooResolver을 실행하기 위해 각 말하는 어떤 방법이 있나요, 그리고 첫 번째 한 후 두 번째 해결 BarResolver을 실행 끝내다?

+0

아니요, 아니요 –

+0

무엇을하려고 하든지간에. 더 좋은 방법이 있습니다. – Carsten

+0

그것은'foo'와'bar'가 무엇이고 왜이 순서로 해결되어야하는지에 달려 있습니다. 그러나 일반적으로 foo와 bar가 포함 된 객체로 푸시하는 FooBarResolver를 사용하면이 작업을 수행 할 수 있습니다. – estus

답변

5

해결사는 병렬로 해결됩니다. FooBar을 직렬로 해결해야하는 경우에는 FooBar 리졸버 중 하나 여야합니다. 그들은 다른 경로에서 자신이 사용하는 가정하는 경우, FooBarFooBar 리졸버를 포장 할 수 있습니다

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이 사실을 알고 있어야한다는 약속이나 FooBar에서 반환되는 관측 경우 제대로 해결하려면 그렇지 않으면 추가 안전 장치가 추가되어야합니다 (예 : await Observable.of(this.fooResolver.resolve(route)).toPromise()).

FooBarFoo 또는 Bar은 같은 경로에 나타나서는 안됩니다. 중복 된 결과가 발생하기 때문입니다.

+0

이 코드는 작동하고 코드를 재사용 할 수 있습니다. 많은 감사합니다! –

+1

당신을 진심으로 환영합니다. – estus