diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c b/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c index 0d7b9cc70..ca9e56753 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c @@ -553,7 +553,7 @@ ecma_builtin_promise_race_or_all (ecma_value_t this_arg, /**< 'this' argument */ if (ECMA_IS_VALUE_ERROR (ret)) { - if (is_done) + if (!is_done) { ret = ecma_op_iterator_close (iterator); } diff --git a/tests/jerry/es2015/promise-all-iterator.js b/tests/jerry/es2015/promise-all-iterator.js index 6850fb174..4c53cf3c0 100644 --- a/tests/jerry/es2015/promise-all-iterator.js +++ b/tests/jerry/es2015/promise-all-iterator.js @@ -74,3 +74,8 @@ var rejects = Promise.all(createIterable([ fulfills.then(result => { assert (result + "" === "foo,bar"); }); rejects.catch(result => { assert (result === "baz"); }); + +var closed = false; +delete Promise.resolve; +Promise.all(createIterable([1,2,3], {'return': function () { closed = true; }})); +assert (closed); diff --git a/tests/jerry/es2015/promise-race-iterator.js b/tests/jerry/es2015/promise-race-iterator.js index 2575b88da..e225d5482 100644 --- a/tests/jerry/es2015/promise-race-iterator.js +++ b/tests/jerry/es2015/promise-race-iterator.js @@ -62,3 +62,8 @@ var rejects = Promise.race(createIterable([ fulfills.then(result => { assert (result + "" === "foo"); }); rejects.catch(result => { assert (result === "baz"); }); + +var closed = false; +delete Promise.resolve; +Promise.race(createIterable([1,2,3], {'return': function () { closed = true; }})); +assert (closed);