描述
在《深入浅出NodeJS》一书中的第四章,给出了一个promise/deferred的一个简单实现,但是读来读去总觉得有些问题,所以拿来作者的代码做了个实验
实验代码
|
|
如果我们在最后setTimeout中设置10ms之后执行,那么then函数注册的三个callback可以正常处理response,结果如下
|
|
可以看出register callback发生在emit之前,这大概是网络IO速度比较慢造成的,那我们加大setTimeout延迟的时间到1000ms
|
|
可以看到emit发生在register callback之前,所以then注册的callback并没有执行
结论
这实际上就是一个巧合,因为IO的低速导致了register callback之前,这种promise方式并不能保证then每次都能拿到结果