Fix ECMAScript to IDL Promise
type conversion
#219
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Most notably, this fixes the bug where rejected promises were being converted into resolved promises and that
Promise.resolve(x)
returnsx
whenx
is aPromise
object from the same realm as thePromise.resolve
function, whereas WebIDL requires the conversion to always return a newPromise
object.Note that there still is a small timing difference for non‑
void
promises due to the fact that the IDL conversion and promise reaction are being performed in separatethen
callbacks, whereasWebIDL
runs them in the samethen
callback. (See the “to react to aPromise<T>
” algorithm)Fixing this minor timing discrepancy would require the type conversion to be performed manually in implementation classes or overriding the
then
method of the convertedPromise
instance.P.S.: If you still want
then
to be called with two arguments, then the correct callback is:Which is the default behaviour when
null
orundefined
is passed.