2
2
3
3
import { Router , Message , utils } from 'src/scalecube-services/services' ;
4
4
import { Observable } from 'rxjs/Observable' ;
5
+ // $FlowFixMe
6
+ import 'rxjs/add/operator/catch' ;
7
+
5
8
6
9
const isObservable = ( obj : any ) : boolean => {
7
10
if ( obj . constructor . name === 'Observable' ) {
@@ -36,10 +39,12 @@ export class ServiceCall {
36
39
if ( ! Array . isArray ( message . data ) ) {
37
40
return reject ( new Error ( `Message format error: data must be Array` ) ) ;
38
41
}
42
+
39
43
const inst = this . router . route ( message ) ;
44
+
40
45
if ( inst && inst . service && utils . isLoader ( inst ) ) {
41
46
return inst . service . promise . then ( ( myservice ) => {
42
- return resolve ( myservice [ message . method ] ( ...message . data ) )
47
+ return resolve ( myservice [ message . method ] ( ...message . data ) ) ;
43
48
} ) ;
44
49
} else if ( inst ) {
45
50
return resolve ( inst . service [ message . method ] ( ...message . data ) ) ;
@@ -58,12 +63,14 @@ export class ServiceCall {
58
63
observer . error ( new Error ( `Service not found error: ${ message . serviceName } .${ message . method } ` ) ) ;
59
64
} else if ( utils . isLoader ( inst ) ) {
60
65
let unsubscribe ;
61
- const promise = inst . service . promise ;
62
- promise . then ( ( service ) => {
63
- unsubscribe = createServiceObserver ( message , service , observer ) ;
66
+ const promise = new Promise ( resolve => {
67
+ inst . service . promise . then ( ( service ) => {
68
+ resolve ( createServiceObserver ( message , service , observer ) ) ;
69
+ } ) . catch ( e => observer . error ( e ) ) ;
70
+
64
71
} ) ;
65
72
return ( ) => {
66
- promise . then ( ( ) => unsubscribe ( ) )
73
+ promise . then ( unsubscribe => unsubscribe ( ) ) ;
67
74
} ;
68
75
} else {
69
76
return createServiceObserver ( message , inst . service , observer ) ;
0 commit comments