首页 > 解决方案 > 您将如何在 Angular 中使用一次调用来发布和获取数据?

问题描述

我刚刚接受了一次面试,面试官问我 - 假设我使用 HTTP 以 Angular 进行了一个 post call,我得到了 200 OK 的响应。这意味着生成了一个新的 Id。现在我将不得不进行单独的 GET 调用来获取此 ID。有没有办法在一个电话中获得这个ID?

我说取决于服务器响应。如果响应具有 Id,我们可以简单地订阅 observable 并获取它的值。他说不,我们只得到 OK 响应。我想不出别的办法。然后他说你听说过 angular 的 promises 吗?我不知道如何使用 Promise 在单次通话中实现这一目标。

这就是我知道如何在 Angular 中使用 Promise 进行 POST 调用的方式:

@Injectable()
export class WebApiPromiseService {
    headers: Headers;
    options: RequestOptions;

    constructor(private http: Http) {
        this.headers = new Headers({ 'Content-Type': 'application/json', 
                                     'Accept': 'q=0.8;application/json;q=0.9' });
        this.options = new RequestOptions({ headers: this.headers });
    }

    createService(url: string, param: any): Promise<any> {
    let body = JSON.stringify(param);
    return this.http
        .post(url, body, this.options)
        .toPromise()
        .then(this.extractData)
        .catch(this.handleError);
    }  

    private extractData(res: Response) {
        let body = res.json();
        return body || {};
    }

    private handleError(error: any): Promise<any> {
        console.error('An error occurred', error);
        return Promise.reject(error.message || error);
    }
}

标签: angularhttp

解决方案


推荐阅读