Sha256: 539bca5d2d4a8e2642294d9b8def42182697e2fb83c2d6b42d3886412fb8a944
Contents?: true
Size: 1.68 KB
Versions: 81
Compression:
Stored size: 1.68 KB
Contents
'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = GetIntrinsic('%SyntaxError%'); var $TypeError = GetIntrinsic('%TypeError%'); var $Promise = GetIntrinsic('%Promise%', true); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var Type = require('./Type'); var assertRecord = require('../helpers/assertRecord'); var callBound = require('call-bind/callBound'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/9.0/#sec-asynciteratorclose module.exports = function AsyncIteratorClose(iteratorRecord, completion) { assertRecord(Type, 'Iterator Record', 'iteratorRecord', iteratorRecord); // step 1 if (!(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); // step 2 } if (!$then) { throw new $SyntaxError('This environment does not support Promises.'); } var iterator = iteratorRecord['[[Iterator]]']; // step 3 return new $Promise(function (resolve) { var ret = GetMethod(iterator, 'return'); // step 4 if (typeof ret === 'undefined') { resolve(completion); // step 5 } else { resolve($then( new $Promise(function (resolve2) { // process.exit(42); resolve2(Call(ret, iterator, [])); // step 6 }), function (innerResult) { if (Type(innerResult) !== 'Object') { throw new $TypeError('`innerResult` must be an Object'); // step 10 } return completion; }, function (e) { if (completion.type() === 'throw') { completion['?'](); // step 8 } else { throw e; // step 9 } } )); } }); };
Version data entries
81 entries across 27 versions & 2 rubygems