我被这个问题困扰了很长一段时间。
启动应用程序时,我获取了一些数据
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;
};
我试着用这种方法来解决这个问题--但是没有帮助。当变量将不再是未定义的()时,我怎么能期待一个函数呢?
如果我改变函数来获得像这样的东西
service.getTest = function () {
var defer = $q.defer();
setTimeout(function () {
defer.resolve(questionList);
},1000);
return defer.promise;
};
一切都会好的,但我不想等待稀疏的时间……
发布于 2017-10-02 04:41:15
你需要同步你的承诺。像这样使用service.getTest
的service.loadTest
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
});
});
});
您可以将questionList作为参数传递并在getTest()
中使用它
在这种情况下,首先解析您的getData promise,然后轮到loadTest,然后轮到getTest()函数,因此所有这些函数都将按照层次结构以同步的方式逐个调用。
https://stackoverflow.com/questions/46516591
复制相似问题