angularjs - 从 promise 结果返回字符串

标签 angularjs angular-promise angular-translate

我想在这个 $translate 服务周围有一个包装函数:https://angular-translate.github.io/docs/#/guide/03_using-translate-service因此我们可以通过调用 $language.translate('keyword') 而不是 promise 在代码中轻松使用这些函数。

所以,我在我的应用程序中创建了一个新服务来完成这项工作。这是一个非常简单的函数,但它返回 undefined[Object Object]

 angularApp.factory("$language", ['$translate', function($translate){

    function trans(keyword){
        console.log("translate in $language", keyword);

        return $translate(keyword).then(function(msg) {
            console.log("translation successfull", msg);
            return msg;
        }, function(translationId){
            console.log("translation is not known", translationId);
            return translationId
        })
    }

    return {
        translate : trans
    }
}]);

在这两种情况下,无论是否知道翻译,console.log() 都会向我显示正确的字符串,但在我的页面上它显示 [object object] 或未定义(当我删除首先 return 就在 $translate(keyword) 之前。 当我使用像 {{::"KEYWORD"| 这样的过滤器时翻译}}它工作正常。

如何让我的函数返回带有翻译的字符串或 translationId(当没有找到翻译时,它实际上与关键字相同)?

最佳答案

如果您使用的是异步变体,那么您似乎期望结果是同步的,无论如何它都会返回 Promise 对象。

看起来您可以使用 $translate.instant() 来使用 $translate 服务的 synchronous 变体,但是这个 sync 变体。如果在翻译过程中发生任何事情,您不会收到错误代码。

重写

angularApp.factory("$language", ['$translate', '$sce', function($translate, $sce){

    function trans(keyword){
        console.log("translate in $language", keyword);

        var translation = $translate.instant(keyword)
        var msg = $sce.valueOf(translation);
        if (msg) {
            console.log("translation successfull", msg);
            return msg;
        }
        else {
            console.log("translation is not known");
            return "Error"
        }
    }

    return {
        translate : trans
    }
}]);

关于angularjs - 从 promise 结果返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52311798/

相关文章:

javascript - 如何在这种情况下使用 JavaScript setTimeout()

angularjs - 使用 Angular 1 应用程序管理 Typescript 中的 ES6/2015 Promise

javascript - 服务 Controller 中的成功和错误函数

javascript - 三元运算符中的 Angular 翻译过滤器

javascript - Angular 翻译未知 $translateProviderProvider

javascript - 选择年份的 ng-options 列表并默认查看当前年份

javascript - 通过 angularjs 将 reCaptcha v3 响应发送到 php api

php - 我怎样才能从 angularJS 到 phalcon php 发出完整的回发请求

javascript - 如何避免使用 $q 嵌套 promise

spring - 使用通配符的 ReloadableResourceBundleMessageSource