参考文档:https://github.com/tj/node-thunkify
https://github.com/tj/co
主要功能:配合co使用,将function(param,callback),风格的函数,转化为thunky风格的函数,以供co yield 后面 使用
Thunks
Thunks are functions that only have a single argument, a callback. Thunk support only remains for backwards compatibility and may be removed in future versions of co
.
什么是thunks
Thunks 是一个只有一个参数(即回调函数)的函数,thunk 主要是为了向后兼容,未来co可能就不会再支持这种风格的函数了
--------------------------如下代码使用thunkfy-----------------
var co = require('co'); var thunkify = require("thunkify");
// 模拟一个普通的异步请求类似readFile,不是thunk风格,有两个参数第一个是函数参数,第二个是回调 function myThunk(userName,callback) { setTimeout(function(){ callback(null,"hello "+userName ); },200) }
// myR 是封装之后符合thunk风格的函数
var myR =thunkify(myThunk); co(function *(){ var a = yield myR("a"); console.log(a); return "over"; }).then(function(r){ console.log(r); })
-------------------------------------
如上代码等价于如下不使用thunkify的代码(但是有些现成的函数库是无法这样改造的,最典型的是readFile)
var co = require('co'); function myR(userName) { return function(callback) { setTimeout(function () { callback(null,"hello "+userName ); },200) } } co(function *(){ var a = yield myR("a"); console.log(a); return "over"; }).then(function(r){ console.log(r); })