角度异步请求

时间:2018-02-06 18:12:49

标签: javascript angular typescript observable

我是编程和学习从Adam Freeman一书中做角度示例项目的新手。 问题出在对服务器的异步HTTP请求中。

以下是使用saveProduct()方法的模型的一部分:

export class Model {
private products: Product[];
private locator = (p: Product, id: number) => p.id == id;
    constructor(private dataSource: RestDataSource) {
        this.dataSource.getData().subscribe(data => this.products = data);
    }
    getProducts(): Product[] {
        return this.products;
    }
    getProduct(id: number): Product {
        return this.products.find(p => this.locator(p, id));
    }
    saveProduct(product: Product) {
        if (product.id == 0 || product.id == null) {
            this.dataSource.saveProduct(product).subscribe(p => this.products.push(p));
        } else {
            this.dataSource.updateProduct(product).subscribe(p => {
            let index = this.products.findIndex(item => this.locator(item, p.id));
            this.products.splice(index, 1, p);
            });
        }
    }

这是我的RestDataSource:

export const REST_URL = new OpaqueToken("rest_url");
@Injectable()
export class RestDataSource {
constructor(private http: Http, @Inject(REST_URL) private url: string) { }

getData(): Observable<Product[]> {
    return this.sendRequest(RequestMethod.Get, this.url);
}
saveProduct(product:Product): Observable<Product>{
    return this.sendRequest(RequestMethod.Post, this.url, product);    
}



private sendRequest(verb: RequestMethod, url: string, body?: Product) {
    return this.http.request(new Request({
    method: verb,
    url: url,
    body: body, 
    headers: new Headers({
        "Access-Key": "<secret>",
        "Application-Name": "exampleApp"})
        })).map(response => response.json()).catch((error: Response) => Observable.throw(`Network Error: ${error.statusText} (${error.status})`));
    }
}    

我认为在saveProduct请求必须是Product对象之后作为响应,我们可以推送我们的产品数组,但我总是得到回应:

{fieldCount:0,affectedRows:1,insertId:120,serverStatus:2,warningCount:0,...}和表中的空行

请帮我理解这个问题。这有什么不对?

0 个答案:

没有答案