Open loskael opened 6 years ago
在这篇文章(https://cnodejs.org/topic/57d68794cb6f605d360105bf )里面,讲到process.nextTick()的时候举了两个例子,为什么当递归调用process.nextTick时,即使fs.readFile完成,其callback无机会执行,而将process.nextTick替换成setImmediate后就有机会执行那个callback呢?
@weibinzhu
你可以看看 hyj1991 的注释:
//进入I/O处理的函数(重点分析的部分),此处挂载timeout是为了防止在uv_io_poll中陷入阻塞无法执行timers;并且对于mode为
//UV_RUN_NOWAIT类型的uv_run执行,timeout为0可以保证其立即跳出uv__io_poll,达到了非阻塞调用的效果
uv__io_poll(loop, timeout);
//实现在loop-watcher.c文件中,一次将&loop->check_handles中的check_cb全部执行完毕(如果存在的话)
uv__run_check(loop);
//执行结束时的资源释放,loop->closing_handles指针指向NULL
uv__run_closing_handles(loop);
注意 uv__run_check
也就是 check 阶段,在一次循环中只会执行一次,也就是这个 一次将&loop->check_handles中的check_cb全部执行完毕(如果存在的话)
,所以递归调用 setImmediate 的时候只可能在下一次循环执行
建议你好好读一下这篇文章吧,特别是这两部分 https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#process-nexttick https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#process-nexttick-vs-setimmediate
至于递归执行 process.nextTick() 阻塞的问题,看这句就够了:
process.nextTick() fires immediately on the same phase
请问这次的homework3具体是要怎么做?
这是要后端起一个服务器进行数据交互么? 前端发一个ajax请求,后端起一个node服务器返回数据?
这个LocalStorage是前端的一种用以保存数据的变量嘛?
这个测试用例是homework2的测试用例?