Promises should not play any role in making this decision.
A promise, after all is just an abstraction over a calculation that might take time. The result of a promise, is an abstraction of a normal result.
Generally, it is good practice to have immutable values, as mutable state is really bad to have anyway. Mutable state makes testing harder. In your case, mutable global state is even worse. One of the finest articles on why is written by Angular's author Misko Havery and is called Singletons Are Pathological Liars.
So, the answer is - do what you would have done in synchronous code. Would you return a copy, or a reference in your synchronous code. This is a subjective question which I can't really answer, but all facts point to "have as little state as possible in your code".