Это все просто, если мы говорим об одном действии, и его отмене. А если речь идет о цепочке действий?
В том сценарии, что вы описали, просто не нужно использовать оптимистичный интерфейс.
Да это и невозможно - как переместить файл в папку не зная её id? На клиенте, это, положим, реализовать можно, но отправить запрос сохранения на сервер - уже нет.
В данном случае придётся скорость работы интерфейса приносить в жертву упрощению кода и здравому смыслу.
Идеальный вариант - показать папку сразу, но явно выделить её как "загружающуюся".
Возьмём, например, веб-интерфейс Я.Диска: там реализована именно такая логика. Очевидно, что у Яндекса есть возможность потратить деньги и силы на реализацию "очередей атомарных операций", но они решили, что оно того не стоит.
И часто такой интерфейс может отстрелить пользователю ногу. Вы услужливо дали ему наизменять структуру директорий, а потом оказалось, что нужно отматывать всё к самому началу. Как думаете, пользователь в этот момент подумает "
Ну, по крайней мере интерфейс не тормозил, когда я всё это делал" или всё-таки что-то другое?