Angular Observables and recursive requests with Progress bar takes large browser memory
I tried to upload a bunch of files through one by one (one request over another) through Observables and recursive requests, but it consumes very large RAM memory and even completes also its not releasing the memory.
My Sample code (Contains only core logical method instead of full component)
PersonInfo Interface:
interface PersonInfo {
personId: number;
name: string:
email: string;
resume: File;
progress: number;
isUpload: boolean;
}
PersonInfo Component Code:
uploadPersonInfo() {
const uploadCollection: Array<PersonInfo> = [
{ personId: 1, name: "Ram", email: "ram@example.com", resume: fileCollection[0], progress: 0, isUpload: false },
{ personId: 2, name: "Kumar", email: "kumar@example.com", resume: fileCollection[1], progress: 0, isUpload: false },
{ personId: 3, name: "Prakash", email: "prakash@example.com", resume: fileCollection[2], progress: 0, isUpload: false },
];
const httpUploadPersonInfo = (person: PersonInfo): Observable<HttpEvent<boolean>> => {
const payload = new FormData();
const httpOption = {
headers: new HttpHeaders(),
reportProgress: true
};
payload('id', person.personId);
payload('name', person.name);
payload('email', person.email);
payload('resume', person.resume, person.resume.name);
const req = new HttpRequest('POST', 'http://localhost:3000/Person/UploadPersonInfo', payLoad, httpOptions);
return this.http.request<boolean>(req);
}
let index = 0;
const upload = (): any => {
if (index === uploadCollection.length) {
return;
}
const person: PersonInfo = uploadCollection[index];
httpUploadPersonInfo().subscribe((event: HttpEvent<boolean>) => {
switch (event.type) {
case HttpEventType.UploadProgress:
person.progress = Math.round((event.loaded / person.resume.size) * 100)
break;
case HttpEventType.Response:
if(event && event.body == true) {
index += 1;
upload();
}
break;
}
});
}
upload();
}
On Init block:
ngOnInit() {
this.uploadPersonInfo();
}
RAM Consumption:
Note: I explored the following question but it was full filled my
requirement
Angular 2 Http, Observables and recursive requests
I need to upload all person information one by one sequential order
not in parallel. Moreover I need to monitor the progress of file
upload too.
Kindly let me know the optimized way to perform this operation in Sequential order with upload file progress option.
angular recursion angular5 rxjs5 flatmap
add a comment |
I tried to upload a bunch of files through one by one (one request over another) through Observables and recursive requests, but it consumes very large RAM memory and even completes also its not releasing the memory.
My Sample code (Contains only core logical method instead of full component)
PersonInfo Interface:
interface PersonInfo {
personId: number;
name: string:
email: string;
resume: File;
progress: number;
isUpload: boolean;
}
PersonInfo Component Code:
uploadPersonInfo() {
const uploadCollection: Array<PersonInfo> = [
{ personId: 1, name: "Ram", email: "ram@example.com", resume: fileCollection[0], progress: 0, isUpload: false },
{ personId: 2, name: "Kumar", email: "kumar@example.com", resume: fileCollection[1], progress: 0, isUpload: false },
{ personId: 3, name: "Prakash", email: "prakash@example.com", resume: fileCollection[2], progress: 0, isUpload: false },
];
const httpUploadPersonInfo = (person: PersonInfo): Observable<HttpEvent<boolean>> => {
const payload = new FormData();
const httpOption = {
headers: new HttpHeaders(),
reportProgress: true
};
payload('id', person.personId);
payload('name', person.name);
payload('email', person.email);
payload('resume', person.resume, person.resume.name);
const req = new HttpRequest('POST', 'http://localhost:3000/Person/UploadPersonInfo', payLoad, httpOptions);
return this.http.request<boolean>(req);
}
let index = 0;
const upload = (): any => {
if (index === uploadCollection.length) {
return;
}
const person: PersonInfo = uploadCollection[index];
httpUploadPersonInfo().subscribe((event: HttpEvent<boolean>) => {
switch (event.type) {
case HttpEventType.UploadProgress:
person.progress = Math.round((event.loaded / person.resume.size) * 100)
break;
case HttpEventType.Response:
if(event && event.body == true) {
index += 1;
upload();
}
break;
}
});
}
upload();
}
On Init block:
ngOnInit() {
this.uploadPersonInfo();
}
RAM Consumption:
Note: I explored the following question but it was full filled my
requirement
Angular 2 Http, Observables and recursive requests
I need to upload all person information one by one sequential order
not in parallel. Moreover I need to monitor the progress of file
upload too.
Kindly let me know the optimized way to perform this operation in Sequential order with upload file progress option.
angular recursion angular5 rxjs5 flatmap
add a comment |
I tried to upload a bunch of files through one by one (one request over another) through Observables and recursive requests, but it consumes very large RAM memory and even completes also its not releasing the memory.
My Sample code (Contains only core logical method instead of full component)
PersonInfo Interface:
interface PersonInfo {
personId: number;
name: string:
email: string;
resume: File;
progress: number;
isUpload: boolean;
}
PersonInfo Component Code:
uploadPersonInfo() {
const uploadCollection: Array<PersonInfo> = [
{ personId: 1, name: "Ram", email: "ram@example.com", resume: fileCollection[0], progress: 0, isUpload: false },
{ personId: 2, name: "Kumar", email: "kumar@example.com", resume: fileCollection[1], progress: 0, isUpload: false },
{ personId: 3, name: "Prakash", email: "prakash@example.com", resume: fileCollection[2], progress: 0, isUpload: false },
];
const httpUploadPersonInfo = (person: PersonInfo): Observable<HttpEvent<boolean>> => {
const payload = new FormData();
const httpOption = {
headers: new HttpHeaders(),
reportProgress: true
};
payload('id', person.personId);
payload('name', person.name);
payload('email', person.email);
payload('resume', person.resume, person.resume.name);
const req = new HttpRequest('POST', 'http://localhost:3000/Person/UploadPersonInfo', payLoad, httpOptions);
return this.http.request<boolean>(req);
}
let index = 0;
const upload = (): any => {
if (index === uploadCollection.length) {
return;
}
const person: PersonInfo = uploadCollection[index];
httpUploadPersonInfo().subscribe((event: HttpEvent<boolean>) => {
switch (event.type) {
case HttpEventType.UploadProgress:
person.progress = Math.round((event.loaded / person.resume.size) * 100)
break;
case HttpEventType.Response:
if(event && event.body == true) {
index += 1;
upload();
}
break;
}
});
}
upload();
}
On Init block:
ngOnInit() {
this.uploadPersonInfo();
}
RAM Consumption:
Note: I explored the following question but it was full filled my
requirement
Angular 2 Http, Observables and recursive requests
I need to upload all person information one by one sequential order
not in parallel. Moreover I need to monitor the progress of file
upload too.
Kindly let me know the optimized way to perform this operation in Sequential order with upload file progress option.
angular recursion angular5 rxjs5 flatmap
I tried to upload a bunch of files through one by one (one request over another) through Observables and recursive requests, but it consumes very large RAM memory and even completes also its not releasing the memory.
My Sample code (Contains only core logical method instead of full component)
PersonInfo Interface:
interface PersonInfo {
personId: number;
name: string:
email: string;
resume: File;
progress: number;
isUpload: boolean;
}
PersonInfo Component Code:
uploadPersonInfo() {
const uploadCollection: Array<PersonInfo> = [
{ personId: 1, name: "Ram", email: "ram@example.com", resume: fileCollection[0], progress: 0, isUpload: false },
{ personId: 2, name: "Kumar", email: "kumar@example.com", resume: fileCollection[1], progress: 0, isUpload: false },
{ personId: 3, name: "Prakash", email: "prakash@example.com", resume: fileCollection[2], progress: 0, isUpload: false },
];
const httpUploadPersonInfo = (person: PersonInfo): Observable<HttpEvent<boolean>> => {
const payload = new FormData();
const httpOption = {
headers: new HttpHeaders(),
reportProgress: true
};
payload('id', person.personId);
payload('name', person.name);
payload('email', person.email);
payload('resume', person.resume, person.resume.name);
const req = new HttpRequest('POST', 'http://localhost:3000/Person/UploadPersonInfo', payLoad, httpOptions);
return this.http.request<boolean>(req);
}
let index = 0;
const upload = (): any => {
if (index === uploadCollection.length) {
return;
}
const person: PersonInfo = uploadCollection[index];
httpUploadPersonInfo().subscribe((event: HttpEvent<boolean>) => {
switch (event.type) {
case HttpEventType.UploadProgress:
person.progress = Math.round((event.loaded / person.resume.size) * 100)
break;
case HttpEventType.Response:
if(event && event.body == true) {
index += 1;
upload();
}
break;
}
});
}
upload();
}
On Init block:
ngOnInit() {
this.uploadPersonInfo();
}
RAM Consumption:
Note: I explored the following question but it was full filled my
requirement
Angular 2 Http, Observables and recursive requests
I need to upload all person information one by one sequential order
not in parallel. Moreover I need to monitor the progress of file
upload too.
Kindly let me know the optimized way to perform this operation in Sequential order with upload file progress option.
angular recursion angular5 rxjs5 flatmap
angular recursion angular5 rxjs5 flatmap
asked Nov 20 at 6:10
B.Balamanigandan
1,70712867
1,70712867
add a comment |
add a comment |
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53387194%2fangular-observables-and-recursive-requests-with-progress-bar-takes-large-browser%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53387194%2fangular-observables-and-recursive-requests-with-progress-bar-takes-large-browser%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown