我长期忍受这个问题。
启动应用时,我会获得一些数据
setGetFactory.getData('server/getTest.php','q').then(function(data){
questionsFactory.loadTest(data);
});
收到的数据我转移到处理它们的工厂的功能
service.loadTest = function (data) {
startQuestionList = data;
questionList = angular.copy(startQuestionList);
};
我还有一个应该向控制器提供数据的函数。但问题是当控制器调用它时,尚未收到数据。
service.getTest = function () {
var defer = $q.defer();
defer.resolve(questionList);
return defer.promise;
};
我尝试以这种方式解决问题 - 但它没有帮助。 我怎么能在函数中期望,而变量将不再是undefined()
如果我改变了这样的功能
service.getTest = function () {
var defer = $q.defer();
setTimeout(function () {
defer.resolve(questionList);
},1000);
return defer.promise;
};
一切都会奏效,但我不想等待稀疏的时间......
答案 0 :(得分:0)
你需要同步你的承诺,即。 service.loadTest
service.getTest
service.loadTest = function (data) {
var defer = $q.defer();
startQuestionList = data;
questionList = angular.copy(startQuestionList);
defer.resolve(questionList);
return defer.promise;
};
像这样
setGetFactory.getData('server/getTest.php','q').then(function(data){
questionsFactory.loadTest(data).then(function(questionList){
setGetFactory.getTest(questionList).then(function(){
//this way all the steps take place on after another
});
});
});
然后在打电话时你需要这样做
getTest()
您可以将questionList作为参数传递,并在gacutil.exe /i Magick.NET-x86.dll /f
gacutil.exe /i Magick.NET-Q16-x86.dll /f
gacutil.exe /i Magick.NET-Q16-x86.Native.dll /f
在这种情况下会发生什么; 首先,你的getData promise被解决,然后转到你的loadTest,然后轮到你的getTest()函数,所以所有这些函数将按照层次结构和同步方式一个接一个地调用。