@wiz-code/async-fsm
Version:
Finite StateMachine JavaScript Library
126 lines (105 loc) • 2.71 kB
JavaScript
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();