2016-08-22 11 views
2

私は約束を守ろうとしています。以下のgetExternalMap()は約束を返しています(ajax call => deferred.resolve()を処理し、deferred.promiseを返します)。 "最初の連鎖"は問題なく呼び出されますが、 "2番目の連鎖"は呼び出されません。Qチェーンが正しくない

私はそれがよく書かれていると思ったが、そうではなく、なぜ私はまだ見つけることができない。

var self = this; 
getExternalMap().then(function() { 
     console.log("First chaining"); 
     var parsedMap = self.destinationsApiParser.getSortDestinations(); 
     return self.initProxies(parsedMap); 
    }).then(function() { 
     console.log('second chaining'); 
    }); 

this.initProxies = function(parsedMap) { 
    var deferred = Q.defer(); 
    var destinationsApiProxy = new DestinationsApiProxy(this.app, parsedMap); 
    deferred.resolve(); 
    return deferred.promise; 
} 
+4

チェーンの最後に 'catch()'または 'done()'を追加してエラーを確認してください。 – Sirko

+2

'initProxies'は約束を返すべきではありません。非同期ではありません。 – Bergi

+0

は、sirkoのおかげで問題を発見しました、initProxiesは何もしておらず、ちょっと黙ってクラッシュしました。また、ベルギの発言も良いです。あなたのおかげです。 –

答えて

0

私が正しく理解していた場合は、代わりにこれをしたい:

var self = this; 
getExternalMap() 
    .then(() => console.log("1st chaining")) 
    .then(self.destinationsAPIParser.getSortDestinations) 
    .then(self.initProxies) 
    .then(() => console.log("2nd chaining")) 

this.initProxies = function(parsedMap) { 
    var deferred = Q.defer(); 
    var destinationsApiProxy = new DestinationsApiProxy(this.app, parsedMap); 
    deferred.resolve(); 
    return deferred.promise; 
} 

self.destinationsAPIParser.getSortDestinationsは約束を返すと仮定。

関連する問題