在 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 调用将多个链接在一起,具体取决于 Observables。

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