Somehow the code in the callback is evaluated multiple times, even though the code executed after the promise is returned is only executed once. Maybe there is something happening when requesting a List that I am not aware of.
Just to add to Francis answer there is an additional problem if you do this in the paint method in an extension (which is in most cases not a good idea) it will be executed multiple times. All the callbacks in the API are subscriptions, they will be called whenever the data requested changes, which in the case of CurrentSelections will be a lot of times.
If you use the promise it will only be resolved once, and that will be when the object is created, which in most cases means that data is not available yet. You then need to listen to the Validated event to get the actual data.