async-iterator-close.js 938 B

123456789101112131415161718192021222324252627
  1. 'use strict';
  2. var call = require('../internals/function-call');
  3. var anObject = require('../internals/an-object');
  4. var getBuiltIn = require('../internals/get-built-in');
  5. var getMethod = require('../internals/get-method');
  6. module.exports = function (iterator, method, argument, reject) {
  7. try {
  8. var returnMethod = getMethod(iterator, 'return');
  9. if (returnMethod) {
  10. return getBuiltIn('Promise').resolve(call(returnMethod, iterator)).then(function (result) {
  11. try {
  12. if (method !== reject) anObject(result);
  13. } catch (error3) {
  14. reject(error3);
  15. return;
  16. }
  17. method(argument);
  18. }, function (error) {
  19. method === reject ? method(argument) : reject(error);
  20. });
  21. }
  22. } catch (error2) {
  23. // the original error (`argument`) takes priority over `return()` errors
  24. return method === reject ? reject(argument) : reject(error2);
  25. } method(argument);
  26. };