Return 来自 promise 结果的字符串
Return string from promise result
我想在这个 $translate
服务周围有一个包装函数:https://angular-translate.github.io/docs/#/guide/03_using-translate-service 这样我们就可以通过调用 $language.translate('keyword' 在我们的代码中轻松地使用这些函数) 而不是承诺。
所以,我在我的应用程序中创建了一项新服务,它应该可以完成这项工作。这是一个非常简单的函数,但它是 returning 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" | translate}}
这样的过滤器时,它工作正常。
如何让我的函数 return 带有翻译或 translationId 的字符串(当没有找到翻译时,它实际上与关键字相同)?
您似乎希望结果是同步的,如果您使用的是异步变体,无论如何它都会转到 return Promise
对象。
您似乎可以使用 $translate.instant()
服务的 synchronous
变体 $translate
,但此 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
}
}]);
我想在这个 $translate
服务周围有一个包装函数:https://angular-translate.github.io/docs/#/guide/03_using-translate-service 这样我们就可以通过调用 $language.translate('keyword' 在我们的代码中轻松地使用这些函数) 而不是承诺。
所以,我在我的应用程序中创建了一项新服务,它应该可以完成这项工作。这是一个非常简单的函数,但它是 returning 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" | translate}}
这样的过滤器时,它工作正常。
如何让我的函数 return 带有翻译或 translationId 的字符串(当没有找到翻译时,它实际上与关键字相同)?
您似乎希望结果是同步的,如果您使用的是异步变体,无论如何它都会转到 return Promise
对象。
您似乎可以使用 $translate.instant()
服务的 synchronous
变体 $translate
,但此 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
}
}]);