在Angular 2 HTTP请求期间,Observable不会触发

时间:2016-05-10 12:27:19

标签: ajax typescript angular ionic2 es6-promise

我有以下方法,使用Ionic 2和Angular 2:

private login(params: any, url: string){
    var p = new Promise<JsonResult>((resolve, reject) => {
        let body = JSON.stringify(params);
        let headers = new Headers({ 'Content-Type': 'application/json' });
        let options = new RequestOptions({ headers: headers });
        this.http.post(url, body, options)
            .timeout(10000, new Error('Timeout exceeded during login'))
            .subscribe((res) => {
                let json = new JsonResult().deserialize(res.json());
                resolve(json);   
            }, (err) => { 
                reject(err);
            });
    });
    return p;
}

无论我做什么,订阅都没有按预期工作。 错误处理程序永远不会被触发。超过超时后甚至都没有。

这是一个已知问题,还是我的语法有问题?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果你想返回Promise,我会这样做:

private login(params: any, url: string){
        let body = JSON.stringify(params);
        let headers = new Headers({ 'Content-Type': 'application/json' });
        let options = new RequestOptions({ headers: headers });
        return this.http.post(url, body, options)
            .timeout(10000, new Error('Timeout exceeded during login'))
            .catch(err => {
              console.log(err);
              return Observable.of([]));
            })
            .map((res) => {
                return new JsonResult().deserialize(res.json());
            }) 
            .toPromise();
}