如何在等待承诺时排队或推迟函数调用

时间:2014-10-30 15:34:15

标签: javascript angularjs

我在使用$http.get内设置的值时遇到问题。由于它是异步的,所以当promise没有返回时我无法访问该值。有没有办法调用函数,检查是否已经定义了所需的值,如果没有,请等待,否则继续使用该函数?

我试图使用$ q.all但是我没有一系列的承诺,我只有1个承诺和一个在返回承诺之前被调用的函数但是需要promises结果。我不能在promise之后使用then(),因为我想多次调用该函数,而promise只在启动时调用。以下是我的html,app.js以及出现问题的服务的基本概述:

HTML:

<div data-tool="contactForm" data-language="english">
    <h1>{{'heading' | translate }}</h1>
</div>

app.js:

mainApp.directive('tool', ['translationService', function (translationService) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            //load current translation files with the giver paramters
            translationService.loadDefaultTranslation(attrs.language);
        }
    }
}]);

mainApp.filter('translate', function (translationService) {
    'use strict';
    return function (input) {
        //translate the given input
        return translationService.doTranslation(input);
    };
});

translationService.js:

//Called once on startup
var translation;
var loadDefaultTranslation = function (language) {

    $http.get(language + '.json').success(function (data) {
        translation = data;
    });
}

//This is called multiple times from within a filter
var doTranslation = function(input)
{
    return translation[input];
}

1 个答案:

答案 0 :(得分:1)

您可以在函数doTranslation中添加条件。 并且在翻译未设置时返回输入。

如果您使用的是angular-ui-router,则可以使用i18n模块,如ngBabelfish