扫码关注官方订阅号
光阴似箭催人老,日月如移越少年。
我用例子来告诉你,假设有一个这样的函数,它是把两个数字相加,并且可以有一个回调执行的参数。
function sum(a,b,callback){ var data=a+b; callback.call(this,null,data); data++; callback.call(this,null,data); }
简单的执行这个函数,就像下面一样
sum(1,2,function(err,data){ console.log(data); })
你得到的结果将是两次输出,分别是3,4
如果你对这个使用了thunkify
var sum=thunkify(sum); var sumfunc=sum(1,2); sumfunc(function(err,data){ console.log(data); })
你会看到只有一个输出,那就是3,后面第二次输出没有了。
这就是上面那个called发挥的作用,它会让你sum函数定义的callback只执行一次,就算后面有更多的callback它也不管不问。
为什么会这样?主要是因为thunkify一般是和co配合用的,而co里面,你callback以后,它接收到数据之后就执行next函数了,如果你多次执行的话,会多次调用next,很明显会造成错误。
这是一个不得已的取舍。
所以你定义sum的时候,不要在callback之后再修改data的值进行第二次callback,养成这个习惯。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我用例子来告诉你,假设有一个这样的函数,它是把两个数字相加,并且可以有一个回调执行的参数。
简单的执行这个函数,就像下面一样
你得到的结果将是两次输出,分别是3,4
如果你对这个使用了thunkify
你会看到只有一个输出,那就是3,后面第二次输出没有了。
这就是上面那个called发挥的作用,它会让你sum函数定义的callback只执行一次,就算后面有更多的callback它也不管不问。
为什么会这样?主要是因为thunkify一般是和co配合用的,而co里面,你callback以后,它接收到数据之后就执行next函数了,如果你多次执行的话,会多次调用next,很明显会造成错误。
这是一个不得已的取舍。
所以你定义sum的时候,不要在callback之后再修改data的值进行第二次callback,养成这个习惯。