is possible to return a value from the promise?
i have these functions
get_categories() {
this.categories_count = 0;
this.getCategories.get_categories(1)
.then(data => {
console.log(data);
this.items = data.results;
for (var i = 0; i < this.items.length; i++) {
this.categories_count = this.get_categories_count(this.items[i].name);
this.categories_list.push(this.items[i]);
console.log(this.categories_count);
}
});
}
get_categories_count(category) {
this.getFacebookEvents.get_events(1)
.then(data => {
this.items = data;
this.categories_count = this.insert_data(this.items, category);
return this.categories_count;
});
}
insert_data(items, category) {
var count = 0;
for (var i = 0; i < this.items.length; i++) {
var start_year = parseInt(this.items[i].data_inizio.substring(6, 10))
var start_month = parseInt(this.items[i].data_inizio.substring(3, 5))
var start_day = parseInt(this.items[i].data_inizio.substring(0, 2))
var start_hours = parseInt(this.items[i].ora_inizio.substring(0, 2))
var start_minutes = parseInt(this.items[i].ora_inizio.substring(3, 5))
var end_year = parseInt(this.items[i].data_fine.substring(6, 10))
var end_month = parseInt(this.items[i].data_fine.substring(3, 5))
var end_day = parseInt(this.items[i].data_fine.substring(0, 2))
var end_hours = parseInt(this.items[i].ora_fine.substring(0, 2))
var end_minutes = parseInt(this.items[i].ora_fine.substring(3, 5))
var date = new Date();
var today_year = date.getFullYear();
var today_month = date.getMonth();
var today_day = date.getDate();
var start_date = new Date(Date.UTC(start_year, start_month - 1, start_day, start_hours, start_minutes))
var end_date = new Date(Date.UTC(end_year, end_month - 1, end_day, end_hours, end_minutes))
var today_date = new Date();
var start = new Date(Date.UTC(start_year, start_month - 1, start_day));
var end = new Date(Date.UTC(start_year, start_month - 1, start_day));
var today = new Date(today_year, today_month, today_day)
var week = new Date(date.setDate(date.getDate() + 7))
var month = new Date(date.setDate(date.getDate() + 30))
if (today <= start && this.items[i].category == category) {
count++
}
}
return count;
}
is possible to get the value of this function get_categories_count(category) ???
now is set to undefined
Thank you|
filippodicostanzo:
get_categories_count(category) {
this.getFacebookEvents.get_events(1)
.then(data => {
this.items = data;
this.categories_count = this.insert_data(this.items, category);
return this.categories_count;
});
}
something like this.
get_categories_count(category) {
return new Promise((resolve) => {
this.getFacebookEvents.get_events(1)
.then(data => {
this.items = data;
this.categories_count = this.insert_data(this.items, category);
resolve(this.categories_count);
});
}
})
vks_gautam1:
return new Promise((resolve) => {
this.getFacebookEvents.get_events(1)
.then(data => {
this.items = data;
this.categories_count = this.insert_data(this.items, category);
resolve(this.categories_count);
});
}
Thank you now i have this value
How i can get this value?
I need the count value in _zone_symbol_value:
i edit my function with your function
get_categories_count(category) {
return new Promise((resolve) => {
this.getFacebookEvents.get_events(1)
.then(data => {
this.items = data;
this.categories_count = this.insert_data(this.items, category);
resolve(this.categories_count);
});
});
}
i have other problem
if i want to add a fields in my array isn’t possible in then data promise.
any solution?
example this.items[i].try = “PROVA” doesn’t found in my array categories list
get_categories() {
this.categories_count = 0;
this.getCategories.get_categories(1)
.then(data => {
console.log(data);
this.items = data.results;
for (var i = 0; i < this.items.length; i++) {
this.get_categories_count(this.items[i].name).then(data => {
this.items[i].try = "PROVA";
});
this.categories_list.push(this.items[i]);
}
console.log(this.categories_list);
});
}
Part of the reason your code is hard to debug is that you are writing in antipatterns. I suggest you define your Promises in TypeScript. Read this:
https://basarat.gitbooks.io/typescript/docs/promise.html
Toward the end, it talks about Promise.all()
which may help you with your array question.
Also, your code nests thens inside of thens. That’s extremely hard to debug if anything goes wrong because you have asynchrony inside of asynchrony. It’s ok to chain a then after a then, and maybe that will work in your situation.
Don’t do: .then(.then ... )
Ok to do: .then().then()
Thank you for your clarify
I resolve
get_categories() {
this.getCategories.get_categories(1)
.then(data => {
this.array = data.results;
for (var i = 0; i < this.array.length; i++) {
this.categories_list.push(this.array[i]);
}
return this.set_categories(this.categories_list, this.array);
});
}
get_facebook_events() {
this.getFacebookEvents.get_events(1)
.then(data => {
this.items = data;
return this.set_events(this.items);
});
}
set_categories(category, item) {
this.categories_list = category;
}
set_events(items) {
this.facebook_events = items;
this.category_counter();
}
category_counter() {
for (var i = 0; i < this.categories_list.length; i++) {
this.categories_list[i].countevents = this.insert_data(this.facebook_events, this.categories_list[i].name)
}
console.log(this.categories_list);
}
insert_data(items, category) {
var count = 0;
for (var i = 0; i < this.items.length; i++) {
var start_year = parseInt(this.items[i].data_inizio.substring(6, 10))
var start_month = parseInt(this.items[i].data_inizio.substring(3, 5))
var start_day = parseInt(this.items[i].data_inizio.substring(0, 2))
var start_hours = parseInt(this.items[i].ora_inizio.substring(0, 2))
var start_minutes = parseInt(this.items[i].ora_inizio.substring(3, 5))
var end_year = parseInt(this.items[i].data_fine.substring(6, 10))
var end_month = parseInt(this.items[i].data_fine.substring(3, 5))
var end_day = parseInt(this.items[i].data_fine.substring(0, 2))
var end_hours = parseInt(this.items[i].ora_fine.substring(0, 2))
var end_minutes = parseInt(this.items[i].ora_fine.substring(3, 5))
var date = new Date();
var today_year = date.getFullYear();
var today_month = date.getMonth();
var today_day = date.getDate();
var start_date = new Date(Date.UTC(start_year, start_month - 1, start_day, start_hours, start_minutes))
var end_date = new Date(Date.UTC(end_year, end_month - 1, end_day, end_hours, end_minutes))
var today_date = new Date();
var start = new Date(Date.UTC(start_year, start_month - 1, start_day));
var end = new Date(Date.UTC(start_year, start_month - 1, start_day));
var today = new Date(today_year, today_month, today_day)
var week = new Date(date.setDate(date.getDate() + 7))
var month = new Date(date.setDate(date.getDate() + 30))
if (today <= start && this.items[i].category == category) {
count++
}
}
return count;
}
Instead of all that gnarly homebrew date parsing, how about using date-fns ?
1 Like
thank you @rapropos for your suggestion.
now to manipulate the date is very simple
Apologies to @filippodicostanzo for the hijack, but @rapropos I though I’d seen you recommend moment.js to someone else in the past. I might be crossing wires, but if I remember correctly: Is date-fns better, or better for this particular case? I haven’t used either.
AaronSterling:
I though I’d seen you recommend moment.js to someone else in the past. I might be crossing wires, but if I remember correctly: Is date-fns better, or better for this particular case? I haven’t used either.
I have recently changed my mind, and now recommend date-fns. It is lighter, and moment caused all sorts of problems with lazy loading in app-scripts #848 .
2 Likes