在 angular 中添加功能 2、如何获取联系人数据库的新 ID?
Add function in angular 2, how do i get a new id for a contact database?
我尝试建立一个联系表,我的问题是我无法为 POST-Function 获取新的 ID。它总是让我发出这个信号:
{
_isScalar: false,
operator: Object {...},
source: Object {...}
}
我该怎么做才能获得新 ID,我需要如下 ID:1,2,3,...
public Add = (Name: string, Nachname: string, Geburtsdatum: string, Strasse: string, Hausnummer: string, Postleitzahl: string, Wohnort: string): Observable<boolean> => {
let id = this._http.get(this.actionUrl + 'getid', { headers: this.headers })
.map(res => res.json());
var toAdd = JSON.stringify({
Id: id,
Name: Name,
Nachname: Nachname,
Geburtsdatum: Geburtsdatum,
Strasse: Strasse,
Hausnummer: Hausnummer,
Postleitzahl: Postleitzahl,
Wohnort: Wohnort
});
console.error(toAdd);
var res = this._http.post(this.actionUrl, toAdd, { headers: this.headers })
.map(res => true)
.catch(this.handleError);
console.error(res);
return res;
}
我能发现的第一个问题是,您没有在那里订阅您的 http.get
请求。如果您不添加 subscribe
调用,则永远不会执行该请求。
此外:Observables 本质上是异步的,因此您不会像您期望的那样从调用中取回您的价值。您必须在 subscribe
回调中这样做。这也意味着依赖于该响应的每个逻辑都会进入该回调。但是,您可以通过 .flatMap
调用将多个链接在一起,具体取决于 Observable
s。
public Add = (Name: string, Nachname: string, Geburtsdatum: string, Strasse: string, Hausnummer: string, Postleitzahl: string, Wohnort: string): Observable<boolean> => {
return this._http.get(this.actionUrl + 'getid', { headers: this.headers })
.map(res => res.json())
.flatMap(res => {
var toAdd = JSON.stringify({
Id: res, // depends on what your getid call returns
Name: Name,
Nachname: Nachname,
Geburtsdatum: Geburtsdatum,
Strasse: Strasse,
Hausnummer: Hausnummer,
Postleitzahl: Postleitzahl,
Wohnort: Wohnort
});
console.error(toAdd);
return this._http.post(this.actionUrl, toAdd, { headers: this.headers })
.map(res => {
console.log(res);
return true; // maybe return the actual result?
})
.catch(this.handleError);
}
);
}
您正在记录的 res
变量是一个 Observable 而不是数据库的实际结果。您可以在 .map
方法中记录响应,出于某种原因您将在其中返回 true
。
我尝试建立一个联系表,我的问题是我无法为 POST-Function 获取新的 ID。它总是让我发出这个信号:
{
_isScalar: false,
operator: Object {...},
source: Object {...}
}
我该怎么做才能获得新 ID,我需要如下 ID:1,2,3,...
public Add = (Name: string, Nachname: string, Geburtsdatum: string, Strasse: string, Hausnummer: string, Postleitzahl: string, Wohnort: string): Observable<boolean> => {
let id = this._http.get(this.actionUrl + 'getid', { headers: this.headers })
.map(res => res.json());
var toAdd = JSON.stringify({
Id: id,
Name: Name,
Nachname: Nachname,
Geburtsdatum: Geburtsdatum,
Strasse: Strasse,
Hausnummer: Hausnummer,
Postleitzahl: Postleitzahl,
Wohnort: Wohnort
});
console.error(toAdd);
var res = this._http.post(this.actionUrl, toAdd, { headers: this.headers })
.map(res => true)
.catch(this.handleError);
console.error(res);
return res;
}
我能发现的第一个问题是,您没有在那里订阅您的 http.get
请求。如果您不添加 subscribe
调用,则永远不会执行该请求。
此外:Observables 本质上是异步的,因此您不会像您期望的那样从调用中取回您的价值。您必须在 subscribe
回调中这样做。这也意味着依赖于该响应的每个逻辑都会进入该回调。但是,您可以通过 .flatMap
调用将多个链接在一起,具体取决于 Observable
s。
public Add = (Name: string, Nachname: string, Geburtsdatum: string, Strasse: string, Hausnummer: string, Postleitzahl: string, Wohnort: string): Observable<boolean> => {
return this._http.get(this.actionUrl + 'getid', { headers: this.headers })
.map(res => res.json())
.flatMap(res => {
var toAdd = JSON.stringify({
Id: res, // depends on what your getid call returns
Name: Name,
Nachname: Nachname,
Geburtsdatum: Geburtsdatum,
Strasse: Strasse,
Hausnummer: Hausnummer,
Postleitzahl: Postleitzahl,
Wohnort: Wohnort
});
console.error(toAdd);
return this._http.post(this.actionUrl, toAdd, { headers: this.headers })
.map(res => {
console.log(res);
return true; // maybe return the actual result?
})
.catch(this.handleError);
}
);
}
您正在记录的 res
变量是一个 Observable 而不是数据库的实际结果。您可以在 .map
方法中记录响应,出于某种原因您将在其中返回 true
。