Last active
January 1, 2017 17:35
-
-
Save hasangilak/7742df6dbf0f00f3d063623e9e643b09 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function resolvePromise(promise, iterator) { | |
promise.then( | |
(response) => { | |
let result = iterator.next(response); | |
if (!result.done) { | |
sync(result.value, iterator); | |
} | |
}, | |
error => { | |
let result = iterator.next(error); | |
if (!result.done) { | |
sync(result.value, iterator); | |
} | |
} | |
); | |
} | |
function resolveGenerator(generator, iterator) { | |
let result = generator.next(); | |
if (!result.done) { | |
sync(result.value, iterator); | |
} | |
} | |
function resolveSimpleResult(result, iterator) { | |
let _result = iterator.next(result); | |
if (!_result.done) { | |
sync(_result.value, iterator) | |
} | |
} | |
function callGenerator(generator) { | |
if (typeof generator == "function") { | |
return generator(); | |
} | |
return generator; | |
} | |
function decideOnGeneratorOrPromiseOrSimpleAnswer(result) { | |
if (result.next) { | |
return {type: "generator", result}; | |
} else if (result.then) { | |
return {type: "promise", result}; | |
} | |
return {type: "result", result}; | |
} | |
function chooseGenerator(generator, iterator) { | |
if (generator.next) { | |
return generator; | |
} | |
return iterator; | |
} | |
export function sync(generator, iterator) { | |
let {type, result} = decideOnGeneratorOrPromiseOrSimpleAnswer(callGenerator(generator)); | |
if (type == "generator") { | |
resolveGenerator(result, chooseGenerator(result, iterator)); | |
} else if (type == "promise") { | |
resolvePromise(result, chooseGenerator(result, iterator)); | |
} else if (type == "result") { | |
console.log(result); | |
resolveSimpleResult(result, chooseGenerator(result, iterator)); | |
} | |
} | |
///////////////////////////////////////// | |
// utitlities and foo bar example | |
/////////////////////////////////////// | |
// throwError | |
export function throwError(middleWareName, recover, _message = "") { | |
let error = new Error('cant pass ' + middleWareName); | |
error.recover = function () { | |
recover(); | |
}; | |
error.message = function () { | |
return _message; | |
}; | |
throw error; | |
} | |
//isLoginMiddleWare | |
export function* isLoginMiddleware(nextState, replace, next) { | |
let {user, response} = yield ping(); | |
if (response.statusCode == 200) { | |
throwError('isLoginMiddleware', function () { | |
console.log('recovered') | |
}, 'custom message'); | |
replace('/profile'); | |
} else { | |
browserHistory.push('/login'); | |
AlertBox("error", "لطفا در ابتدا وارد حساب کاربری شوید") | |
} | |
} | |
// example | |
sync(function*() { | |
try { | |
yield* isLoginMiddleware(nextState, replace); | |
next() | |
} catch (error) { | |
error.recover(); | |
console.log(error.message()) | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment