MCPcopy Create free account
hub / github.com/microsoft/SandDance / AsyncGenerator

Function AsyncGenerator

docs/app/js/sanddance-app.js:54353–54413  ·  view source on GitHub ↗
(gen)

Source from the content-addressed store, hash-verified

54351var _awaitValueJs = require("./AwaitValue.js");
54352var _awaitValueJsDefault = parcelHelpers.interopDefault(_awaitValueJs);
54353function AsyncGenerator(gen) {
54354 var front, back;
54355 function send(key, arg) {
54356 return new Promise(function(resolve, reject) {
54357 var request = {
54358 key: key,
54359 arg: arg,
54360 resolve: resolve,
54361 reject: reject,
54362 next: null
54363 };
54364 if (back) back = back.next = request;
54365 else {
54366 front = back = request;
54367 resume(key, arg);
54368 }
54369 });
54370 }
54371 function resume(key, arg1) {
54372 try {
54373 var result = gen[key](arg1);
54374 var value = result.value;
54375 var wrappedAwait = value instanceof (0, _awaitValueJsDefault.default);
54376 Promise.resolve(wrappedAwait ? value.wrapped : value).then(function(arg) {
54377 if (wrappedAwait) {
54378 resume(key === "return" ? "return" : "next", arg);
54379 return;
54380 }
54381 settle(result.done ? "return" : "normal", arg);
54382 }, function(err) {
54383 resume("throw", err);
54384 });
54385 } catch (err) {
54386 settle("throw", err);
54387 }
54388 }
54389 function settle(type, value) {
54390 switch(type){
54391 case "return":
54392 front.resolve({
54393 value: value,
54394 done: true
54395 });
54396 break;
54397 case "throw":
54398 front.reject(value);
54399 break;
54400 default:
54401 front.resolve({
54402 value: value,
54403 done: false
54404 });
54405 break;
54406 }
54407 front = front.next;
54408 if (front) resume(front.key, front.arg);
54409 else back = null;
54410 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected