等待q.defer

时间:2017-10-01 20:27:26

标签: javascript angularjs


我长期忍受这个问题。

启动应用时,我会获得一些数据

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;
    };

一切都会奏效,但我不想等待稀疏的时间......

1 个答案:

答案 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()函数,所以所有这些函数将按照层次结构和同步方式一个接一个地调用。