我發現自己寫了很多在Javascript意大利麪條的時候我必須處理異步 應用(特別是與所有的數據必須通過JS獲得 OpenSocial的代碼打交道時) 。通常的模式是這樣的:如何避免在Javascript
- 用戶第一次登錄到應用程序,獲取他的數據。
- 對他的數據做A(例如通過向服務器發送請求來獲得他的朋友)。
- 對此數據執行B操作(例如,將他的朋友發送給服務器進行一些處理)。
- 對他的數據做C(例如,檢查服務器響應是否有效,以便我們可以做其他事情)。
請注意,此順序執行路徑(1 => 2 => 3 => 4)不適合異步。性質 Ajax,所以用戶最終等待很長時間,代碼變成一團糟,因爲每個步驟 取決於以前的。
的代碼示例:
gadgets.util.registerOnLoadHandler(setupUser())
...
function setupUser() {
var req = [get data and setup request]
req.send(some_url, some_data, function(response) { getFriendsFor(response.user) });
}
function getFriendsFor(user) {
var friends = [get friends from user]
var req = [setup request]
req.send(some_other_url, some_other_data, function(response { validateFriendsResponse(response.friends) });
}
function validateFriendsResponse(friends) {
if (friends.valid())
...
loadCanvas();
}
你可以看到每個函數依賴於前一個,更糟糕的是,它在 被稱爲一個特定的順序是有用的。當用戶在等待時添加諸如顯示/隱藏加載 屏幕和其他噱頭之類的東西時,情況會變得更糟。
你會如何去修復呢?
煮它,直到它是人類 – 2009-10-15 15:41:55
您的主要擔心似乎是用戶最終等待很長時間才能完成所有這些。爲什麼不在每次請求返回後向用戶提供一些反饋,以便他們知道發生了什麼。它可以像3階段進度條一樣簡單,或者告訴用戶發生了什麼。 (你甚至可以用「reticulating splines」消息來形容meme apeal。) – 2009-10-15 16:18:26
Sam:我現在用一個可愛的機器人拍着手臂顯示加載屏幕,但是代碼也讓我擔心,因爲我知道我會有一些在幾個月內閱讀它的問題。 – 2009-10-16 16:06:29