2016-01-05 83 views
0

我在嘗試輪詢端點並使用Q來解析請求。不過,我知道你不能用Q做這件事,因爲一旦承諾解決了它就完成了。如何在輪詢時保持解析Q許諾

有沒有一種方法可以使用Q和我的輪詢一起使用?

我的設置是這樣的:

class Poller { 
    poll() { 
    const deferred = Q.defer(); 

    const promise = $.ajax({ 
     //stuff 
    }); 

    promise.done((resp) => { 
     // this resolves just once, how can I keep resolving 
     // on future xhr calls? 
     deferred.resolve(resp); 
    }); 

    promise.always(() => { 
     setTimeout(() => { 
     this.poll.call(this); 
     }, 5000) 
    }) 

    return deferred.promise; 
    } 

} 

const poller = new Poller(); 

poller.poll().then((resp) => { 
    // keep trigging updates from polling 
}) 
+0

使用進度回調,這將發生一遍又一遍。解決,拒絕將結束諾言。 – Vince

回答

3

承諾的全部意義在於,它只能使用一次解決。您正在尋找的結構是事件

+0

所以在這個例子中,輪詢使用Q有什麼好處?我基本上需要根據獲取的新數據調用函數,所以應該只傳遞一個回調函數? – Ben

+0

在我看來,Q不是爲了這個。通過回電或使用事件庫 – Malvolio