1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-26 03:32:20 +00:00

doc(async): Thunk函数的ES6版本

This commit is contained in:
ruanyf 2016-05-20 07:58:21 +08:00
parent 1764e48fdf
commit 40b5f23e0b

View File

@ -273,6 +273,7 @@ function f(thunk){
```
上面代码中函数f的参数`x + 5`被一个函数替换了。凡是用到原参数的地方,对`Thunk`函数求值即可。
这就是Thunk函数的定义它是"传名调用"的一种实现策略,用来替换某个表达式。
### JavaScript语言的Thunk函数
@ -299,6 +300,7 @@ var Thunk = function (fileName){
任何函数只要参数有回调函数就能写成Thunk函数的形式。下面是一个简单的Thunk函数转换器。
```javascript
// ES5版本
var Thunk = function(fn){
return function (){
var args = Array.prototype.slice.call(arguments);
@ -308,6 +310,15 @@ var Thunk = function(fn){
}
};
};
// ES6版本
var Thunk = function(fn) {
return function (...args) {
return function (callback) {
return fn.call(this, ...args, callback);
}
};
};
```
使用上面的转换器,生成`fs.readFile`的Thunk函数。
@ -317,6 +328,18 @@ var readFileThunk = Thunk(fs.readFile);
readFileThunk(fileA)(callback);
```
下面是另一个完整的例子。
```javascript
function f(a, cb) {
cb(a);
}
let ft = Thunk(f);
let log = console.log.bind(console);
ft(1)(log) // 1
```
### Thunkify模块
生产环境的转换器建议使用Thunkify模块。