读源码---thunkify

    xiaoxiao2025-10-25  8

    /** * Module dependencies. */ var assert = require('assert'); /** * Expose `thunkify()`. */ module.exports = thunkify; /** * Wrap a regular callback `fn` as a thunk. * * @param {Function} fn * @return {Function} * @api public */ function thunkify(fn){ // 校验fn参数类型是否是函数 assert('function' == typeof fn, 'function required'); return function(){ // 创建数组存储参数 var args = new Array(arguments.length); // 保存this的指向 var ctx = this; for(var i = 0; i < args.length; ++i) { args[i] = arguments[i]; } return function(done){ // 判断回调函数是否执行过,没有执行过就push进参数数组 // 用来保证回调函数只会执行一次 var called; args.push(function(){ if (called) return; called = true; done.apply(null, arguments); }); // 经参数数组传递给fn,如果出错就将err传递给回调函数 try { fn.apply(ctx, args); } catch (err) { done(err); } } } }; var thunkify = require('thunkify'); var fs = require('fs'); var read = thunkify(fs.readFile); //var read = thunkify(fs.readFile)('package.json', 'utf8'); read('package.json', 'utf8')(function(err, str){ });
    转载请注明原文地址: https://ju.6miu.com/read-1303520.html
    最新回复(0)