Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将http调用的结果形成为方法的结果?_Javascript_Angular - Fatal编程技术网

Javascript 如何将http调用的结果形成为方法的结果?

Javascript 如何将http调用的结果形成为方法的结果?,javascript,angular,Javascript,Angular,我想将http调用的结果形成为方法的结果。例如: 错误代码: 我知道如何修复上述代码: getPersonId(idBook: number): number { return this.mpShipmentWebAPI .GetLast({ bookID: idBook }) .subscribe((books) => { this.handleData(books), });

我想将http调用的结果形成为方法的结果。例如:

错误代码:

我知道如何修复上述代码:

getPersonId(idBook: number): number {
    return this.mpShipmentWebAPI
        .GetLast({ bookID: idBook })
        .subscribe((books) => {
            this.handleData(books),
        });               
}
我想通过以下方式检查结果:

let idPerson = this.getPersonId(idBook);
if (idPerson > 0) {
    //the rest code here
}

有可能吗?

这是不可能的,因为http调用是异步的。不建议尝试使它们同步,因为这将冻结所有其他内容。正确的方法是:

getPersonId(idBook: number): Observable<number> {
    return this.mpShipmentWebAPI
        .GetLast({ bookID: idBook })
        .map(books => this.handleData(books));               
}

您不能这样做,因为
subscribe
返回一个
Observable
,http调用是
异步的。
getPersonId(idBook: number): Observable<number> {
    return this.mpShipmentWebAPI
        .GetLast({ bookID: idBook })
        .map(books => this.handleData(books));               
}
this.getPersonId(idBook)
    .filter(idPerson => idPerson > 0)
    .do(idPerson => {
       // rest of your code
    });