yunsheng.teng

Results 2 comments of yunsheng.teng

``` const a = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'D1', 'D2']; const b = ['A', 'B', 'C', 'D']; // ['A1', 'A2', 'A', 'B1', 'B2', 'B', 'C1', 'C2', 'C', 'D1',...

图1:实现代码![image](https://user-images.githubusercontent.com/29953517/96546436-d6284300-12dc-11eb-9939-6bd0c433c066.png) 图2:nervjs的setState源码 ![image](https://user-images.githubusercontent.com/29953517/96546562-14bdfd80-12dd-11eb-835d-9a2ab5866dd4.png) 图3:nervjs的clearCallBacks源码 ![image](https://user-images.githubusercontent.com/29953517/96546630-30c19f00-12dd-11eb-803c-8595dc6bcd1d.png) 图4:chrome调用栈时间轴 ![image](https://user-images.githubusercontent.com/29953517/96546703-4f279a80-12dd-11eb-9776-844b8d67d056.png) 当第一setState执行完,render执行完,开始清理第一个setState的callback,从_pendingCallbacks数组中弹出callback执行,也就是f1,执行f1,遇到了setState,把f2push进_pendingCallbacks,f1执行完,检查_pendingCallbacks数组,还有一个f2,于是弹出f2,执行f2,但是其实这时state并没有更新,但是打印出的内容还是上次的state,这种场景下和React输出是不一致的。 @fjyGitHub 我给出的方案: 1.不要这样写; 2.在第二个callback用setTimeout。