[英]Get response of POST request in angular 6
我正在使用 angular 制作一個與 API REST 通信的用戶界面。 在波紋管函數中,我首先通過 post 請求添加一個項目,然后添加用戶在表單中輸入的別名列表,然后將別名添加到項目中,然后我獲取所選應用程序的列表並查找然后將他們的 ID 添加到項目中。 在帖子下方調用:
addProject(name: string, description: string): void {
// Ajouter un nouveau projet
let newProjectId: number;
let newAliasId: number;
let url = this.baseUrl + "/projects";
this.httpClient.post<Project>(url,
{'name': name, 'description': description },
httpOptions).subscribe((data: any) => { newProjectId = data['result']['id'];})
// Ajouter les alias
for (let entry of this.aliasList) {
let UrlAddAlias = this.baseUrl + "/alias";
this.httpClient.post(UrlAddAlias, {'alias': entry }, httpOptions)
.subscribe((data: any) => { newAliasId = data['result']['id'];});
// Ajouter les alias au nouveau projet
let UrlAliasToProject = this.baseUrl + `/projects/${newProjectId}/alias`;
this.httpClient.post(UrlAliasToProject, {"alias_id" : newAliasId}, httpOptions)
.subscribe((data: any) => { console.log("alias added to project");});
};
// Ajouter les applications selectionnées au nouveau projet
for (let entry of this.selectedApps) {
let Urlapp = this.baseUrl + `/apps/name/${entry}`;
let appId;
this.httpClient.get(Urlapp).subscribe(data => { appId = data['result']['id']; });
let urlappToProject = this.baseUrl + `/projects/${newProjectId}/apps`;
this.httpClient.post(urlappToProject, {'app_id': appId });
};
}
問題是我無法檢索 newProjectId 值和 newAliasId 值。 我收到此錯誤:
Object { headers: {…}, status: 405, statusText: "Method Not Allowed", url: "http://api.com/v1/projects/undefined/alias", ok: false, name: "HttpErrorResponse", message: "Http failure response for http://api.com/v1/projects/undefined/alias: 405 Method Not Allowed", error: "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n<title>405 Method Not Allowed</title>\n<h1>Method Not Allowed</h1>\n<p>The method is not allowed for the requested URL.</p>\n" }
我可以通過console.log
獲取值,但它們在其他地方undefined
。
.subscribe
回調異步發生。 這意味着在它之后編寫的代碼仍然會在它之前執行......類似於setTimeout
setTimeout(() => console.log('second'));
console.log('first');
本質上,您可以將.subscribe
之后的.subscribe
放在.subscribe
:
.subscribe((data: any) => {
newProjectId = data['result']['id'];
for (let entry of this.aliasList) { ...
});
如果可能,您可能還想重新設計您的 API,以便不必發出多個請求並讓post
自己處理所有內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.