thunk函数
Posted 前端纸飞机
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thunk函数相关的知识,希望对你有一定的参考价值。
一个多参数函数经过转换器(Thunk函数转换器)处理变成了一个单参数函数,且只接受回调函数作为参数。这个单参数版本, 就叫做Thunk函数。
//常规版的madFile(多参数)
fs.readFile(fileName, callback);
//thunk函数转化器
var ThunkConvert = function (fileName) {
return function (callback) {
return fs.readFile(fileName, callback);
};
};
//得到Thunk版的readme(单参数)
var readFileThunk = ThunkConvert(fileName);
readFileThunk(callback);
可以将Thunk函数转换器封装成一个通用函数。任何函数,只要参数有回调函数, 就能转化成Thunk函数的形式,通俗的说就是把一个函数的执行参数和回调分成两部分传入,相当于函数柯里化。
//通用thunk函数转化器
var ThunkConvert = function (fn) {
return function () {
var args = [].slice.call(arguments);
return function (callback) {
args.push(callback);
return fn.apply(this.args);
};
};
};
var readFileThunk = ThunkConvert(fs.readFile);
readFileThunk(fileA)(callback);
// ES6版本
const ThunkConvert = function (fn) {
return function (...args) {
return function (callback) {
return fn.call(this, ...args, callback);
};
};
};
生产环境的thunk函数转换器,一般使用Thunkify 模块。
//安装
//npm install thunkify
//使用
var thunkify = require('thunkify');
var fs = require('fs');
var read = thunkify(fs.readFile);
read('package.json')(function (err,str){
//...
})
Thunk主要应用:延迟计算,多参异步函数转换成单参,基于Thunk的Generator自动化异步操作等。
以上是关于thunk函数的主要内容,如果未能解决你的问题,请参考以下文章