2016-04-05 15 views
0

デモが示しているように、私が約束したサービスを定義して戻すと(デモのpromise1)、それはまったく解決しません。

しかし、私がコントローラのpromise2(デモのpromise2)を定義すると、それはうまくいく。なぜ?

this is my demo on codepen

serv.getDefer = function() { 
    var defer = $q.defer(); 
    return { 
     defer: defer, 
     promise: defer.promise 
    } 
} 

var defer1 = serv.getDefer().defer; 
var promise1 = serv.getDefer().promise; 
promise1.then(function() { 
    alert('promise1 should work,but doesnt') 
}) 
defer1.resolve(); 

var defer2 = serv.getDefer().defer; 
var promise2 = defer2.promise; 
promise2.then(function() { 
    alert('promise2 works good') 
}) 
defer2.resolve(); 

答えて

2

見て、あなたが機能getDefer(呼び出し2回目)である必要があり、それが可能だと思います新しい変数を返し、それを返します。

しかし、これはうまくいくかもしれない

var deferred = serv.getDefer(); 
deferred.promise.then(function() { 
    alert('promise1 should work,but doesnt') 
}); 
deferred.defer.resolve(); 
(ただしテストしていません)
2

あなたはそれはあなたがdefer1promise1を作成するためにserv.getDefer()の両方を呼び出すあなたの約束1に、新しいdefferedオブジェクトを返しますserv.getDefer()呼び出すたびに。 2つの変数は現在同じ約束ではないので、defer1を解決すると、promise1の約束は未だ解決されていません。

promise2defer2の約束ですので、defer2を解決すると約束が解決されます。

var deferred = serv.getDefer(), 
    defer1 = deferred.defer 
    promise1 = deferred.promise; 

promise1.then(function() { 
    alert('promise1 should work,but doesnt') 
}); 

defer1.resolve(); 
1

promise1がdefer1によって生成されていません:あなたは次のことを行う必要があり、この問題を解決するために

。代わりに、getDefer()を再度呼び出すことによって、新しい遅延オブジェクトを作成しています。

それはdefer2.promiseによって生成されるので、(作品promise2)

私はラインが閉鎖に

var promise1 = defer1.promise; 
関連する問題