我的表有这样的代码(玉符号):
table.displaytable
tbody
tr(ng-repeat="item in itemList"): td
b {{item.Id}}
td {{getTypeName(item.TypeId)}}
和getTypeName实际上正在调用一些异步序列:
$scope.getTypeName = function (typeId) {
var lang= CurrentLanguageService.getCurrentCulture();
var label= TypesService.getLabelAsync(typeId, lang);
return label;
}
在服务中我将函数定义为
var getLabelAsync = function (id, langCulture) {
return loadPromise(langCulture).then(function (data) {
return data;
}
我有以下问题:
我是否正确使用承诺的数据来返回实际的"标签"来自我的getLabelAsync()?
为什么我看到多个调用来解析promise(触发三次调用服务器),而我只有一行表要插值?
我也来了
错误:[$ interpolate:interr]无法插值:{{getTypeName(item.typeId)}} TypeError:无法读取属性'然后'为null
答案 0 :(得分:0)
var getLabelAsync = function (id, langCulture) {
return loadPromise(langCulture); //Just return the promise that will later resolve
}
如果你需要做出自己的承诺,你想稍后解决,你可以使用deferred = $ q.defer();并返回deferrred.promise;然后在回调函数中,您可以调用deferred.reject或deferred.resolve来最终解析您创建的新承诺。如果你有多个承诺,你也可以使用$ q.all,并且你想知道它们何时被解决了。
答案 1 :(得分:0)
不确定您是否正确使用了承诺,它应该如下所示:
myApp.service('someservice',function($q,$http){
this.someFunction = function () {
var defer = $q.defer();
//do some ajax call here
$http.get('blah.html',function(data){
// pass data to your promise then function
defer.resolve(data);
});
//return your promise
return defer.promise;
}
});
你可以这样使用它:
functionc Ctrl($scope,someservice) {
someservice.someFunction().then(data) {
console.log(data);
};
}