Well, the reason why you cannot rely on only user-initiated actions is that changes might also occur from external code. E.g. code that sets the text of an active input field (not from the keyboard app). If we have a pending promise we will get out of sync.