我正在尝试发出http请求并执行地图。
我遵循了角度文档,但由于某种原因,我在地图功能上遇到错误:“参数类型与参数不匹配”。请注意我已导入'rxjs/add/operator/map';
。
我需要npm install
某事吗?
我正在使用Angular 4.0.2
,rxjs 5.0.1
和WebStorm 2016.1.3
,这是我的代码:
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import {Observable} from "rxjs/Observable";
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
@Injectable()
export class ApiService {
constructor(private http: Http) {
}
public getValue() : Observable<any> {
return this.http.get('')
.map(this.extractData)
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}
private extractData(res: Response) {
let body = res.json();
return body.data || { };
}
}
更新
由于某种原因:更改为.map().map(this.extractData)
解决了问题。
这里是map.d.ts
定义:
import { map } from '../../operator/map';
declare module '../../Observable' {
interface Observable<T> {
map: typeof map;
}
}
如果有人可以解释原因,我会很高兴。
更新2:
在运行项目时恢复为.map(this.extractData)
而.map()
似乎无效!可能是webstorm IDE生成的错误。
答案 0 :(得分:0)
您确定错误出现在typedef enum ObjectType {
type_node,
type_int,
type_error,
} ObjectType;
typedef struct {
ObjectType type;
void * value;
} TypedObject;
typedef struct {
bool operator() (const TypedObject *lhs, const TypedObject *rhs){
return (lhs->type==rhs->type) && (lhs->value<rhs->value);
}
} ObjComparator;
int main()
{
std::set<TypedObject *, ObjComparator> mySet;
TypedObject obj;
obj.type=type_int;
obj.value=(void*)new int;
//*(obj.value)=4;
auto insert = mySet.insert(&obj);
std::cout<<insert.second<<std::endl;
if(mySet.find(&obj) == mySet.end())
{
std::cout<<"Not Found..."<<std::endl;
}
else
{
std::cout<<"Found..."<<std::endl;
}
return 0;
}
声明中吗?
IMO这一行:
map
由于缺少URL(return this.http.get('')
),会抛出错误,而是会调用它:
''
如果这是问题,那么检查.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
的签名,它会将异常作为第一个参数。我认为应该是:
Observable.throw
我希望这会有所帮助
答案 1 :(得分:0)
您没有向extractData
提供任何输入参数。更改为.map((data) => this.extractData(data))
或该行的某些内容。