0
我有項目的ID在頁面加載列表:如何選擇使用承諾仍然加載的項目?
var itemIds = [1, 5, 10, 11];
ID被渲染成列表,並顯示給用戶。我有加載關於物品的詳細信息的功能,它返回Promise/A。
function loadInfo(id) { ... }
所有項目信息的加載開始在頁面加載:
val infos = {};
$.each(itemIds, function(i, id) { infos[id] = loadInfo(id); }
現在的問題本身。
當用戶點擊項ID:
- 如果項目信息被加載,信息必須顯示
- 如果項目信息還沒有加載,則必須在它被加載
看起來很容易:
$('li').click(function() {
var id = $(this).data('item-id');
infos[id].then(function(info) { $('#info').text(info); });
});
但是,如果用戶cliked當前一個之前的另一個項目被加載時, n我必須取消當前項目承諾的處理程序並安排新程序。
如何正確地做到這一點?
我有幾個工作解決方案(如維護currentItemId變量並在promise處理程序中檢查它),但它們很醜陋。我應該看看反應式編程庫嗎?
好的,這個解決方案實際上與我使用的相似,正如我所說的那樣,它很醜陋。但是,由於這是唯一的答案,並且技術上正確,我接受它。 – kriomant
也許有人會遇到一些不那麼「醜陋」的東西,但是和我一樣,他們可能會在這一點上與定義發生衝突。醜陋就像美麗 - 它在旁觀者的眼中。 –