UNPKG

@wiz-code/async-fsm

Version:

Finite StateMachine JavaScript Library

126 lines (105 loc) 2.71 kB
var _ = require('underscore'); var Promise = require('es6-promise').Promise; var promise = { resolve: null, }; var globalResolve; var promise1 = new Promise(function (resolve) { globalResolve = resolve; }); var promise2 = Promise.resolve(); var flag = false; function asyncActivity(callback) { promise1 = promise1.then(callback); } function asyncMain(callback) { flag = true; promise2 = promise2.then(callback).then(function () { if (!flag) { globalResolve(); } flag = false; }); } function checkFlag() { if (!flag) { globalResolve(); } } function trigger1() { console.log('init exit'); console.log('s1 entry'); console.log('s1 init entry'); asyncMain(trigger2); asyncActivity(function () {console.log('s1 activity');}); } function trigger2() { console.log('s1 init exit'); console.log('sub1 entry'); console.log('sub1 init entry'); asyncMain(trigger3); asyncActivity(function () {console.log('sub1 activity');}); } function trigger3() { console.log('sub1 init exit'); console.log('subsub1 entry'); //trigger4(); asyncActivity(function () {console.log('subsub1 activity');}); } asyncMain(trigger1); /*function trigger11() { flag = false; console.log('init exit'); console.log('s1 entry'); console.log('s1 init entry'); (function () {console.log('s1 activity');}()); //checkFlag(); return 1; } function trigger12() { flag = false; console.log('s1 init exit'); console.log('sub1 entry'); console.log('sub1 init entry'); (function () {console.log('sub1 activity');}()); //checkFlag(); } function trigger13() { flag = false; console.log('sub1 init exit'); console.log('subsub1 entry'); (function () {console.log('subsub1 activity');}()); //checkFlag(); } _.reduce([trigger11, trigger12, trigger13], function (promise, callback) { return promise.then(callback); }, Promise.resolve());*/ var main = function () { async(s1); }; var s1 = function () { console.log('s1 entry'); //async(sub1); async(s1Activity); return sub1(); }; var sub1 = function (param) { console.log('sub1 entry', param); async(sub1Activity); return subSub1(); }; var subSub1 = function (param) { console.log('sub-sub1 entry', param); //async(subSub1); //async(sub1Activity); return Promise.resolve('sub-sub1'); }; var s1Activity = function (param) { console.log('s1 activity', param); return Promise.resolve('activity'); }; var sub1Activity = function (param) { console.log('sub1 activity1', param); return Promise.resolve('activity'); }; //main();