2016-11-26 160 views
0

我試圖返回此.register()方法:AngularJS嵌套無極

var deferred = $q.defer(); 
    $cordovaPushV5.initialize($constants.PUSH_OPTIONS).then(function() { 
     $cordovaPushV5.onError(); 
     $cordovaPushV5.onNotification(); 

     return $cordovaPushV5.register(); 
    }).then(function (push_token) { 
     deferred.resolve(push_token); 
    }); 
    return deferred.promise; 

但它不會與push_token解決......這似乎是根據我見過的其他問題是正確的,不過,我可以不要讓它正常工作..任何幫助,非常感謝。謝謝!。

+0

你的意思是',然後(樂趣(push_token))'register'完成之前'觸發?還分享'initialize'。 – AndreaM16

+0

夥計們抱歉,我認爲這是我的錯,似乎$ cordova推送通知只會在移動設備上運行時觸發,並且不會在模擬器中運行。我會仔細檢查這一點並回復你。感謝您的幫助。 – user1027620

+1

不要使用'$ q.defer()'來編寫promise。你已經有'$ cordovaPushV5.initialize'的承諾,用'defer'封裝它只會導致錯誤(在這種情況下,你忽略了將錯誤回調傳遞給延遲)。 – teppic

回答

1

我不知道科爾多瓦,但承諾似乎很好。
但它可以簡化爲:

return $cordovaPushV5.initialize($constants.PUSH_OPTIONS) 
     .then(function() { 
      $cordovaPushV5.onError(); 
      $cordovaPushV5.onNotification(); 
      return $cordovaPushV5.register(); 
     }, function(error) { 
      console.log(error); 
    }); 
+0

試過了,它永遠不會解決或產生錯誤... – user1027620

+0

檢查更新:如果添加錯誤功能,您可能會理解發生了什麼事情 – gr3g