angular - 您将如何在 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);
}
}
解决方案
推荐阅读
- java - 如何在 Kafka-Spring 中捕获反序列化错误?
- java - firebase 数据库读取问题
- python - 我可以创建另一个上下文以通过总和值发送吗
- android - 某些 android 设备上的 POST 请求 HTTPUrlConnection 上的 502(服务器挂断)状态代码
- java - 正则表达式将字符串中的一组小写字母转换为大写字母
- java - 日历更改日期
- javascript - React Native - 根据容器大小在 Android 上调整字体大小
- java - 如何将 JSON 响应包装在父对象中
- google-chrome-devtools - 在 Sources 面板中,Chrome Dev Tools 说变量未定义,但在控制台面板中,它有一个值
- java - 错误 org.hibernate.engine.jdbc.spi.SqlExceptionHelper - HikariPool-1 - 连接不可用,请求超时