在提供者中,我有一个代码:
//TaskProvider.ts
doJob(){
let body = (....);
let jsheader = new Headers();
jsheader.append('Content-Type', 'application/json');
this.http.post(this.baseUrl+'/createtask', body, { headers: jsheader })
.subscribe( data => { data.json().this.that;
// want to setRoot from here or make a function to order component to changing root.
}
},
err => {
// navigation for unsuccessful task
}
}
}
Return Promise
或Observable
不起作用。哦是的,map
也没有使用Response
import
答案 0 :(得分:1)
您需要在service
内致电component
提供商,然后再执行page transition
(即setRoot()
)。不要在service
内进行。这是非常糟糕的设计。
注意:您需要从subscribe
中移除provider
并在其中使用map
,如下所示。
仅提取from this的示例。请根据您的使用情况进行更改。
getComments() : Observable<Comment[]> {
// ...using get request
return this.http.get(this.commentsUrl)
// ...and calling .json() on the response to return data
.map((res:Response) => res.json())
//...errors if any
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}
MY-component.ts
this.provider.doJob().subscribe(data => {
//here do the page transition
});