我有一些Post方法的問題。我總是在我的temporarySegment中獲得空的segmentdata對象。我用數字做同樣的方式,這是工作。變量導致訂閱是SegmentData,並在console.log中收到預期的響應。這怎麼可能? 我的方法:訂閱中不能分配數據
onGetSegmentsClick(size: number) {
debugger;
if (size > 0) {
let counter = 0;
let temporarySegment = new SegmentData();
while (counter < size) {
this.segmentService.getSegment(counter + 1, this.elementId, this.documentId).subscribe(result => {
console.log("get segment request is sended");
temporarySegment = result;
console.log("gotten message is:", result);
});
ModalComponent.segmentsCollection.push(new SegmentData());
ModalComponent.segmentsCollection[ModalComponent.segmentsCollection.length - 1] =
ModalComponent.newer.TemporaryObjectEqualizer(temporarySegment);
ModalComponent.segmentsCollection[ModalComponent.segmentsCollection.length - 1].SegmentDataId =
counter + 1;
counter++;
}
}
}
我getSegment方法:
getSegment(segmentId: number, elementId: string, documentId: string) {
let headers = new Headers();
headers.append("Content-type", "application/json");
let input = {
"elementId": elementId,
"documentId": documentId,
"segmentNumber": segmentId
}
let sendingData = JSON.stringify(input);
let urlPost = "https://localhost:44375/api/data/SendSegmentData";
let output = new AsyncSubject<SegmentData>();
let options = new RequestOptions({
headers: headers,
method: RequestMethod.Post,
url: urlPost
});
this.http.post(urlPost, sendingData, options)
.subscribe(result => {
output.next(result.json());
output.complete();
});
return output;
}
類SegmentData客戶端等於在服務器上的相關類。我的回答完美解析。如何解決這個問題? 提前致謝))
您需要了解異步。當你訂閱()時,你發送一個請求。然後while循環中的其餘代碼立即執行。很久以後,異步地,當數千公里以外的服務器處理請求並且服務器已經發迴響應時,您傳遞給訂閱的回調函數被執行。因此,在發送請求後,您無法立即訪問響應中的值。把它放入烤麪包機後,你不能立即吃烤麪包片。烤麪包機告訴你它已經準備好了,你需要吃。 –
謝謝,但如何等到響應回來? –
你不要等待。您將需要訪問響應的代碼放入傳遞給subscribe()的回調中。 –