祸起萧墙:Axios 拦截器
-
很早以前看项目中的封装的
axios时,发现拦截器很有意思,领导告诉我是洋葱模型,自己很感兴趣,一通搜索,然后得知redux中间件和koa都用到了洋葱模型; -
研究项目中的
redux-middleware看不懂Array.reduce这个API,然后研究一番,学会并且爱上,然后就不知道忙啥去了; -
过了一段时间 看了redux 源码 学到了
compose—— 这个基于reduce实现,用于组合的函数。更深一步了解了洋葱模型; -
之后摸鱼的时候,去学习
JavaScript执行机制,了解到执行js脚本时的 函数调用栈,并且了解到了queue栈这个数据结构,后进先出、压栈、出栈、栈顶 深入脑海; -
后来某个无意间的冥想,驱使我从函数调用栈的角度去理解洋葱模型,然后理解如下:洋葱模型就是利用函数调用栈的特点,从而达到预期的代码的执行顺序;
-
然而并没有完,又在一次摸鱼的时候 看到有人说
generator函数、Promise、co实现的async/await, 前面两个知道,第三个是co是什么不知道,也没查,领导在旁边直接问,答:co大概就是能把yield后面跟的promiseresolve之后的值,传给迭代器的下一次next,从而让在yield前定义的变量接收promise resolve之后的值,示意代码在最下方; -
紧接着就了解到了线程之下的协程,大概就是通过控制线程的占用权,达到预期代码的执行顺序,由于之前就知道
redux-saga就是利用generator函数封装的,通过上面已经大致学会了相关知识,然后把之前没看懂的redux-saga大致原理 给看了; -
回头看看差点哭,菜鸡的路就是这么的崎岖,还挺有意思;
function *generatorFn() {
const aaa = yield somePromise()
};
const it = generatorFn();
const {value: prom} = it.next();
prom.then(value => {
it.next(value)
// 此时 函数中 aaa 的值就是 promise resolve的值
})