javascript promise 、缓存和 Angular

标签 javascript angularjs typescript

我有一个 Angular 服务,负责从服务器加载项目,然后当在 View 中选择一个项目时,将从项目列表中取出相应的项目并返回到详细信息。

我现在遇到的问题是,重新加载页面时,我的项目尚未加载,因此我的解析失败,导致重新加载失败。

  getItems = (): ng.IPromise<Array<any>> => {
        if (this.items != undefined) {
            return this.items;
        }

        return this.$http.get(url).then((result) => {
            this.items = result.data['items']; 
            return this.items;
        });
    }

    getItem= (id: any): ng.IPromise<any> => {

        return this.getItems().then(() => angular.forEach(this.items, (item: any) => {
            if (item.id === id) {
                return item;
            }
        }));
    }

我以为这段代码(getItem)会返回一个项目,但它再次返回整个集合。我如何修复我的代码以让我返回单个项目?

最佳答案

如果您可以使用 es6-shim:

getItem= (id: any): ng.IPromise<any> => {
    return this.getItems().then(() => this.items.find( (item: any) => {
        return item.id === id;
    }));
}

或者你可以使用

getItem= (id: any): ng.IPromise<any> => {
    return this.getItems().then(() => this.items.filter( (item: any) => {
        return item.id === id;
    })[0]);
}

关于javascript promise 、缓存和 Angular ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31512026/

相关文章:

javascript - jQuery:通过 css-selector 注册的事件的优先级?

javascript - 在 JavaScript 中,如果带有多个或的 if 在继续之前会评估所有语句吗?

javascript - put 请求如何通过 Angular、Express 和 Mongoose 工作?

javascript - AngularJS - 使用 Jasmine 和 mixpanel 进行测试

angularjs - 如何使用node.js将数组插入mongodb

javascript - 使用属性类进行多次调用的 typescript

php - 如何在加载时打开此模式窗口 - PHP

javascript - 原型(prototype)上的属性会覆盖实际对象的属性吗?

javascript - Angular - Observable 无法正常工作

javascript - 可选值组作为函数参数的 typescript