diff --git a/Promise.js b/Promise.js index 2d340e3..2a2d711 100644 --- a/Promise.js +++ b/Promise.js @@ -258,6 +258,17 @@ object.Constructor('InteractivePromise', Promise, { __new__: function(_, handler){ var handlers = [] var onmessage = function(func){ + var h = obj == null ? + // NOTE: we need to get the handlers from .__message_handlers + // unless we are not fully defined yet, then use the + // bootstrap container (handlers)... + // ...since we can call onmessage(..) while the promise + // is still defined there is no way to .send(..) until it + // returns a promise object, this races here are highly + // unlikely... + handlers + : (obj.__message_handlers = + obj.__message_handlers ?? []) handlers.push(func) } var obj = Reflect.construct( @@ -267,7 +278,6 @@ object.Constructor('InteractivePromise', Promise, { : [function(resolve, reject){ return handler(resolve, reject, onmessage) }], InteractivePromise) - Object.defineProperty(obj, '__message_handlers', { value: handlers, enumerable: false, diff --git a/README.md b/README.md index b97db68..a639226 100644 --- a/README.md +++ b/README.md @@ -1173,7 +1173,7 @@ printer ``` Note that message handling is independent of promise state, so in the above case -we can still _flush_ the buffer even if the promise is resolved +we can still populate the buffer and _flush_ it even if the promise is resolved ```javascript printer .send('log', 'some other message...') @@ -1183,6 +1183,11 @@ printer If the user wants to reject messages after the promise is finalized it is their responsibility. + + #### `Promise.interactive(..)` @@ -1214,7 +1219,7 @@ Send a message to an interactive promise ``` Sending a message triggers message handlers registered via `(..)` -passing each handler the sent arguments. +passing each handler the arguments. diff --git a/package.json b/package.json index 6ce3b9e..425b8bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ig-types", - "version": "6.0.10", + "version": "6.0.11", "description": "Generic JavaScript types and type extensions...", "main": "main.js", "scripts": {