如何在承诺/可观察的呼叫后读取数组中的数据

发布于 2025-01-27 14:49:56 字数 2324 浏览 3 评论 0原文

我不喜欢JavaScript和Angular,目前正在从事某些UI任务,并且对JavaScript的可行/了解

我想要的内容很小,基于钥匙字段的基础过滤对象。

当前,代码正在使用API​​,该API在数组中存储了一些结果。我猜该数组结果在对象(Promise对象)中,我需要在此对象底座上设置一个值的过滤条件。

但是对于我来说,问题是,对象的关键与响应相同,即存储。这样的数据也是

​Array(5) [ {…}, {…}, {…}, {…}, {…} ]
​
0: Object { _isScalar: false, source: {…}, operator: {…} }
​
1: Object { _isScalar: false, source: {…}, operator: {…} }
​
2: Object { _isScalar: false, source: {…}, operator: {…} }
​
3: Object { _isScalar: false, source: {…}, operator: {…} }
​
4: Object { _isScalar: false, source: {…}, operator: {…} }
​
length: 5

如此,即使我迭代每个对象,我也找不到键,即我的过滤标准。

以下是与此注释相关的代码,

getSomeThing(
        name: string,
        dcId: any
    ): Promise<any[]> {
        const url = `<url>`;
        return this.http.get(url, { headers: this.sharedService.getHeaders() })
            .toPromise()
            .then(response => this.getSomeThingOneByOne(name, dcId, response.json()))
            .catch(error => this.sharedService.handleError(error));
    }
private getSomeThingOneByOne(name, dcId, someIds): Promise<any> {
        const someObservables = [];
        someIds.forEach(some => someObservables.push(this.getsomethingObservable(name, dcid, some)));
 
        return Observable.forkJoin(someObservables)     
        .toPromise()
        .catch(error => this.sharedService.handleError(error));
    }
getsomethingObservable(
        name: string,
        dcId: any,
        someId: any
    ): Observable<any> {
        const url = `<url>`;
        return this.http.get(url, { headers: this.sharedService.getHeaders() })
            .map((response: Response) => {
                const vm = response.json();
                return vm;
            })
            .catch((error: any) => Observable.throw(this.sharedService.handleError(error)));
    }

更改了函数和变量的名称。

我 作为数组,即[1,2,3,4,5],此功能getsomethingonebyone呼叫getsomethingObservable以获取与该ID相关的数据。

我想要的是回收数据后,我应该检查其中的某个值,或者在getsomethingObservable中检查该键的值并过滤结果。 但是到期,因为我无法在数组中读取数据someObservables在功能 getsomethingonebyone RAW中我无法在此处添加过滤条件。

在这里需要帮助,因为它需要了解我所缺乏的诺言,观察,角度和打字稿的知识。

I am not into javascript and angular, currently working on some UI task and has workable/little knowledge of javascript

what i want, base on a key field filter out the objects.

currently what code is doing, hitting a api, which is storing some result in an array. this array result are in object (promise object) i guess, and i need to set out a filter condition on this object base on some value.

but for me issue is, object does not have key same as response, it store. data like this

​Array(5) [ {…}, {…}, {…}, {…}, {…} ]
​
0: Object { _isScalar: false, source: {…}, operator: {…} }
​
1: Object { _isScalar: false, source: {…}, operator: {…} }
​
2: Object { _isScalar: false, source: {…}, operator: {…} }
​
3: Object { _isScalar: false, source: {…}, operator: {…} }
​
4: Object { _isScalar: false, source: {…}, operator: {…} }
​
length: 5

so even if i iterate through each object i cant find the key which is my filter criteria.

below is code related to this

getSomeThing(
        name: string,
        dcId: any
    ): Promise<any[]> {
        const url = `<url>`;
        return this.http.get(url, { headers: this.sharedService.getHeaders() })
            .toPromise()
            .then(response => this.getSomeThingOneByOne(name, dcId, response.json()))
            .catch(error => this.sharedService.handleError(error));
    }
private getSomeThingOneByOne(name, dcId, someIds): Promise<any> {
        const someObservables = [];
        someIds.forEach(some => someObservables.push(this.getsomethingObservable(name, dcid, some)));
 
        return Observable.forkJoin(someObservables)     
        .toPromise()
        .catch(error => this.sharedService.handleError(error));
    }
getsomethingObservable(
        name: string,
        dcId: any,
        someId: any
    ): Observable<any> {
        const url = `<url>`;
        return this.http.get(url, { headers: this.sharedService.getHeaders() })
            .map((response: Response) => {
                const vm = response.json();
                return vm;
            })
            .catch((error: any) => Observable.throw(this.sharedService.handleError(error)));
    }

note i have change the name of function and variable.,

now here, getsomeThing call an api which return a list of ids and pass it to getSomethingOneByOne as array ie [1,2,3,4,5] , and this function getSomethingOneByOne call getsomethingObservable to get the data related to that id.

what i want is once i recied the data i should check a certain value in it or in getsomethingObservable check the value it self for that key and filter out the result.
but due since i am not able to read the data in array someObservables in function getSomeThingOneByOne raw i cant add filter condition there.

need help here as it requires knowledge of promise, obserable, angular and typescript which i lack.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一杯敬自由 2025-02-03 14:49:56

刚通过@sonusindhu建议的参考而解决了这一点,然后也在这里。

我已经对getomethingonebyone进行了更改,如下

private getSomeThingOneByOne(name, dcId, someIds): Promise<any> {
        const someObservables = [];
        someIds.forEach(some => someObservables.push(this.getsomethingObservable(name, dcid, some)));
 
        return Observable.forkJoin(someObservables)     
        .toPromise()
        .then(response => {
             var data = response.filter(val=>val[<somekey>]!='<a certain value>');
          return data;
})
        .catch(error => this.sharedService.handleError(error));
    }

just solved this by taking reference from @sonusindhu suggestion and taking reference from here too.

i had made changes on getSomeThingOneByOne as below and it worked

private getSomeThingOneByOne(name, dcId, someIds): Promise<any> {
        const someObservables = [];
        someIds.forEach(some => someObservables.push(this.getsomethingObservable(name, dcid, some)));
 
        return Observable.forkJoin(someObservables)     
        .toPromise()
        .then(response => {
             var data = response.filter(val=>val[<somekey>]!='<a certain value>');
          return data;
})
        .catch(error => this.sharedService.handleError(error));
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文