2014-10-20 36 views
0

我有這樣的代碼:defer.promise打印出對象,而不是數據

app.factory('loadDependencies', function ($q, $timeout) { 

    return { 
     load: function() { 
      console.log("start 1"); 
      var defer = $q.defer(); 


      $timeout(function() { 
       defer.resolve({ resolve: "got dependencies" }); 
      }, 3000); 

      return defer.promise; 

     } 
    } 
}); 

但問題是,defer.promise不會等待超時結束,也只是打印出來的對象properteis和不是數據,它打印出來:

Object { then: qFactory/defer/deferred.promise.then(), catch: qFactory/defer/deferred.promise.catch(), finally: qFactory/defer/deferred.promise.finally() } 

我是新來的角和試圖理解我做錯了什麼?

編輯

什麼,我試圖完成一些更多的信息。

我有一個解決方案,應該動態加載控制器和css文件。

.when('/url', { 
     templateUrl: 'someview', 
     controller: 'somecontroller', 
     resolve: { 
      load: function (loadDependencies) { 
       loadDependencies.load(); // here i need to know get the result of what's inside $timeout of 'load' 
      } 
     } 

    }) 
+0

正如你可以看到我自己的例子,你正在返回一個承諾。你得到的是一個懸而未決的承諾,將在3秒後解決。 – cbass 2014-10-20 13:50:53

+0

有沒有辦法延遲退貨,直到承諾解決? – emc 2014-10-20 13:53:02

+0

你爲什麼。它的目的是什麼? – cbass 2014-10-20 13:53:37

回答

1

這是因爲defer.promise不回你的數據,也沒有等到你timeout完成。那麼你用它做的是分配一些處理,並等待它完成/失敗:

function success(data) { 
    //this is called after defer.resolve({ resolve: "got dependencies" }); gets executed 
    //here you can access your data 
} 

function error(error) { 
    //this is called if the promise gets rejected 
} 

loadDependencies.load().then(success, error); 

現在你的諾言完成時,它會自動調用這些處理程序之一。有更多的可能性應用回調,如.finally()方法。看看。

編輯:

只返回承諾在您的解析器:

.when('/url', { 
     templateUrl: 'someview', 
     controller: 'somecontroller', 
     resolve: { 
      load: function (loadDependencies) { 
       return loadDependencies.load(); // here i need to know get the result of what's inside $timeout of 'load' 
      } 
     } 
    }) 

現在承諾解決和角度後,控制器將被稱爲將被解析的值傳遞給它像這樣:

app.controller("CtrlName", function($scope, load){ 
    //access your load value here 
}); 
+0

但有什麼區別?你會馬上得到一個未決的承諾,對吧? – cbass 2014-10-20 13:56:31

+0

是的,但在我看來,OP沒有得到「承諾」,這就是爲什麼我想解釋它們的原因。在不知道更多細節的情況下,目前沒有辦法給出具體的答案。 – 2014-10-20 14:02:07

+0

我編輯了這個問題,希望它能清楚一點我想要完成的內容 – emc 2014-10-20 14:09:01

相關問題