2015-03-31 87 views
0

我想在添加事件偵聽器之後立即發出GET請求,如下所示。socket.on()方法的成功回調

socket.on('event_of_my_api', function(data){ 
    console.log('my api is working'); 
    }) 
    .then(
    $http.get('path/to/my/api') 
); 

event_of_my_api應該在我的API被稱爲:

### in my api ### 
socket.emit('event_of_my_api', data); 

請幫我找出如何做到這一點。我希望推遲的承諾是解決這個問題。

+0

我不認爲你應該做的,在所有的,也請參閱[這個線程(http://stackoverflow.com/q/29013899/1048572)。一個平衡的API不應該 - 不能用一個單一的承諾來實現。 – Bergi 2015-03-31 17:09:22

回答

0

這是我不太清楚你的問題意味着什麼,因爲你必須在標題和第一句話(指示不同方向的問題)衝突單詞,但這裏有兩種可能的解釋/解答。如果你想要做一個GET立即

socket.on('event_of_my_api', function(data){ 
    console.log('my api is working'); 
    $http.get('path/to/my/api').success(...); 
}); 

假設$http表示AngularJS,然後如果你想要做一個馬上讓你收到插座上'event_of_my_api'事件之後,那麼你就可以做到這一點您設置爲「event_of_my_api」事件的事件處理,而不必等待實際收到該事件後,你可以這樣做:

socket.on('event_of_my_api', function(data){ 
    console.log('my api is working'); 
}); 
$http.get('path/to/my/api').success(...); 

如果這些都不是想要的方向,然後請澄清更進一步的問題是你想要什麼時機。

使用承諾似乎有幾個問題。首先,socket.on()沒有返回承諾,其次承諾是一次性操作,因此使用單個承諾不適用於可能重複發生的事件(承諾只會改變狀態一次,然後鎖定在該狀態)。

+0

@hamok - 這是否清楚你的東西? – jfriend00 2015-04-01 17:13:07