我想通過使用API爲Reddit的首頁創建一個實時源。由於它對Websocket的支持非常有限,我認爲我會使用次優解決方案:我的程序將獲得具有特定頻率的最新帖子,並將它們的一些數據附加到HTML表格中。適當重複API訪問
提供一些代碼,下面是我在做什麼縮短版:
//cliendID and clientSec are declared vars I omit for safety reasons
function Auth(callback){
//Authorization to Reddit API
$.ajax({
type: 'POST',
url: "https://www.reddit.com/api/v1/access_token",
beforeSend: function(xhr) {
xhr.setRequestHeader(
"Authorization",
"Basic " + btoa(clientID + ":" + clientSec));
},
data:
{
grant_type: "client_credentials",
user: clientID,
password: clientSec
},
success: callback
});
}
//params.listing and APIurl are also declared
function afterAuth(token){
accessAPI(token, printResult, params.listing, APIurl);
}
//standardized Reddit API access
function accessAPI(response, callback, inputJSON, url){
//console.log("accessAPI: "+response);
$.ajax({
type: 'GET',
url: /* an oauth.reddit.com link */,
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", response.token_type + " " + response.access_token);
},
data: /* input necessary for that API request */
success: callback
});
};
//test function, for demonstration purposes
function printResult(querydat){
console.log(querydat);
}
什麼我的程序確實是一個簡單的電話:Auth(afterAuth)
,這家連鎖店如下:
如果成功,
Auth
內的POST AJAX請求將調用afterAuth
。afterAuth
使用一個標識符(如果我沒記錯的話)作爲輸入,並且作爲一個「包裝器」來運行多個API訪問。在此示例中,
accessAPI
用於GET AJAX請求,該請求直接訪問oauth.reddit.com鏈接,從該鏈接獲取subreddit數據。我通過它的成功回調來處理這些數據,這裏是一個簡單的演示函數。
我想實現的是,這樣它隨着時間的推移運行其上最近的帖子回調accessAPI
定期調用。
由於這些調用的異步性質(我認爲),setInterval
和環setTimeout
似乎都不是一個可行的解決方案。
我還能做些什麼來產生這個定期的呼叫?
(不用說,的Auth()
反覆的呼喚是不切實際的,但我看不到,我怎麼能操縱內部流除外。)
使用'setInterval'有什麼問題?多久需要刷新數據? – Jag
@JAG在理論上,它在異步調用中並不能很好地工作。但在實踐中,它顯然不會重複呼叫,而是在一次運行後停止。 –
我不知道你的意思'它不重複調用,...'我用'setTimeout'創建了一個[jsfiddle.net/g7ty4Lph/] – Jag