angular - Parsning av JSON i rxjs ajax callback fungerar inte
Jag försöker analysera en JSON-sträng i en ajax-återanrop i Angular2.
Efter att jag har anropat response.json()) och gjort en console.log() fungerar det bra.
Det här är JSON:en jag försöker analysera:
{
"success": true,
"data": {
"id": "14cf4717-f5b6-4002-96b2-321324fc4077",
"number": "1234",
"sections": [
{
"id": "53f43dd7-4c93-4925-a51d-c6f81f314275",
"description": "Test",
"created_at": "2017-10-07 15:08:01",
"updated_at": "2017-10-07 15:08:01",
"lines": [
{
"id": "73fab07f-4401-43a4-99a4-13c891907ea7",
"product_id": "62aa5388-712d-4ab1-9e64-6849889194d1",
"product_name": "Product",
"product_description": "test",
"product_type": "product",
"quantity": "1.00",
"product": {
"id": "62aa5388-712d-4ab1-9e64-6849889194d1",
"name": "Product",
"description": "test"
}
}
]
}
],
"notes": []
}
}
I den här funktionen:
public getQuotation(quotationId: string, callback: Function) {
this.http.get('/quotation/' + quotationId).subscribe((response) => {
const responseJson = response.json();
console.log(responseJson);
callback(null);
}, () => {
callback(null);
});
}
Resultatet är som förväntat:
Men när jag lägger till den här raden under console.log(): const quotation=<FinBaseModel>(responseJson.data);
public getQuotation(quotationId: string, callback: Function) {
this.http.get('/quotation/' + quotationId).subscribe((response) => {
const responseJson = response.json();
console.log(responseJson);
const quotation = <FinBaseModel>(responseJson.data);
callback(quotation);
}, () => {
callback(null);
});
}
Då är lines-arrayen tom...
Jag förstår inte hur det är möjligt eftersom jag gör console.log() innan jag försöker kasta det till en FinBaseModel
Vet någon hur detta är möjligt och hur jag kan åtgärda det?
Svar #1
Istället för att använda JSON.parse kan du göra på detta sätt:
this.http.get('/quotation/' + quotationId)
.map(response=> response.json())
.subscribe((responseData) => {
console.log(responseData);
});
Svar #2
console.log skriver ut objektet som referens. det har ändrats vid tidpunkten för utskriften, antagligen av callbacken.
console.log(responseJson.data)
const quotation = <FinBaseModel>(responseJson.data);
callback(quotation);

