javascript - 当 onInit 钩子(Hook)被多次调用时,如何在 Angular 1.5 中仅调用一次特定的 Promise

标签 javascript angularjs angular-promise

我正在 onInit 函数上进行 API 调用。

   vm.$onInit = function() {
        var callInProgress = false;
        var resultsLoaded = false;

        var url = '/api/times/cst';
        if(callInProgress === false && resultsLoaded ===false){
            callInProgress = true;
            HttpWrapper.send(url,{"operation":'GET'}).then(function(result){
                vm.times = result;
                resultsLoaded = true;
                },function(error){
                vm.errorInApi = true;
            });
        }

现在 $onInit 被多次调用,因此两个标志 callInProgress, resultsLoaded 每次都会被初始化。

所以,检查有点不起作用。

每次调用 $onInit 时都会调用 API,初始化时会调用多次。

如何才能只调用一次电话? 不过它已在 $onInit 上调用。

最佳答案

我建议将 API 调用包装在如下服务中:

(function (angular) {
    'use strict';

    angular
        .module('services.common')
        .service('TimesService', TimesService);

    TimesService.$inject = ['HttpWrapper'];

    function TimesService(HttpWrapper) {
        var timesService = this;
        var timesResult = null;

        timesService.getTimes = getTimes;

        function getTimes() {
            if (!timesResult) {
                timesResult = HttpWrapper.send('/api/times/cst', {"operation": 'GET'});
            }
            return timesResult;
        }

        return timesService;
    }

})(angular);

然后将其注入(inject)到您的 Controller 中并像 TimesService.getTimes().then(...) 一样使用,因此对 API 的调用将在第一次调用 TimesService.getTimes (因为结果将存储在服务内部的 timesResult 中)。

关于javascript - 当 onInit 钩子(Hook)被多次调用时,如何在 Angular 1.5 中仅调用一次特定的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45486281/

相关文章:

javascript - 使用 XMLHttpRequest 将记录添加到数据库

mysql - 如何在 AngularJS 中为 ng-repeat 赋值?

javascript - 模拟服务返回对象($$state)错误

angularjs - 如何在 Angular JS 中使用 Grails 消息代码标签

angularjs - Angular 2-带有 promise 返回的Http未定义

javascript - 在 javascript 中将 6*6 数组转换为 3*3 数组的问题

javascript - 有没有办法使用java代码在浏览器中启用javascript?

javascript - 如何对 div 内的所有内容(除了一个特定的 div 及其子节点)进行单击事件?

javascript - 等待 Angular Factory 资源调用在 for 循环内完成

javascript - 函数中的延迟 Promise 不会延迟函数的执行