Я пытаюсь использовать React with Flux architecture и наткнулся на одно ограничение, с которым я не могу справиться. Проблема заключается в следующем:
- Там есть магазин, который прослушивает событие. Событие имеет идентификатор объекта. Нам нужно получить объект, если необходимо, и сделать его выбранным.
- Если у хранилища нет объекта с этим id - он запрашивает. В обратном вызове мы отправляем другое событие для хранения, которое отвечает за выбор.
- Если у хранилища есть объект - я бы хотел отправить событие выбора, но я не могу, потому что отправка выполняется.
Самое лучшее решение, с которым я столкнулся, - это обернуть внутреннюю отправку в setTimeout(f, 0)
, но выглядит страшно.
На самом деле проблема довольно общая - как я должен организовать цепочку отправки без рассылки отправки (без нарушения текущих ограничений потока), если каждая новая отправка основана на предыдущем результате обработки отправки.
Есть ли у кого-нибудь хорошие подходы к решению таких проблем?
var selectItem(item) {
AppDispatcher.dispatch({
actionType: AppConstants.ITEM_SELECT,
item: item
});
}
// Item must be requested and selected.
// If it in store - select it.
// Otherwise fetch and then select it.
SomeStore.dispatchToken = AppDispatcher.register((action) => {
switch(action.actionType) {
case AppConstants.ITEM_REQUESTED:
var item = SomeStore.getItem(action.itemId);
if (item) {
// Won't work because can't dispatch in the middle of dispatch
selectItem(item);
} else {
// Will work
$.getJSON(`some/${action.itemId}`, (item) => selectItem(item));
}
}
};