javascript - როგორ გავაერთიანოთ ან გავგროვოთ toPromise RxJs-ის საშუალებით?
მე მაქვს შემდეგი მეთოდი, რომელიც აბრუნებს შედეგს, როგორც ნაჩვენებია ქვემოთ:
result: [ { status: 200, ... }, { status: 200, ... }, { status: 400, ... }, ... ]
მე უნდა გავაერთიანო შედეგი სტატუსის ღირებულების გამოყენებით და ვიმუშაო მხოლოდ 2 შედეგზე 3-ის ნაცვლად, მაგალითად ზედა შედეგისთვის:
update() {
this.demoService.update(...).toPromise()
.then(result => {
const message = result.map((x: any) => {
if (x.status === 200) {
return {
text: 'successful'
};
} else {
return {
text: 'fail'
};
}
});
}
})
}
ვცადე RxJs-ის groupBy-ის გამოყენება, მაგრამ ვგულით, რომ იგი ვერ გამოვიყენება Promise-ში. მაშ, როგორ შემიძლია შევკრიბო ეს შედეგი ზემოთ მოყვანილ მაგალითში?
პასუხი #1
არ ვარ დარწმუნებული, ეს მუშაობს თუ არა, მაგრამ თქვენ შეგიძლიათ სცადოთ (თქვენ ფილტრავთ მხოლოდ სუბიექტებს მნიშვნილის უნიკალური სტატუსით, შემდეგ აირჩევთ მხოლოდ სტატუსებს):
update() {
this.demoService.update(...).subscribe(result => {
const messages = result
.filter((x, i, arr) => arr.findIndex(t => t.status === x.status) === i)
.map(x => x.status);
// do stuff
});
}
პასუხი #2
შექმნით კასტომიზებულ ჯგუფირების მეთოდს ასეთს:
var groupBy = (xs, key) => {
return xs.reduce((rv, x) => {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
};
console.log(groupBy([{status: 200, foo: 'bar'}, {status: 200, foo: 'baz'}, {status: 400, foo: 'bar'}], 'status'));გამონაკლისი :
{
"200": [
{
"status": 200,
"foo": "bar"
},
{
"status": 200,
"foo": "baz"
}
],
"400": [
{
"status": 400,
"foo": "bar"
}
]
}
