日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es6 --- Thunkify源码分析

發(fā)布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es6 --- Thunkify源码分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先看一個例子:讀取package.json下的文件,并將讀取的數(shù)據(jù)(若讀取失敗)打印出來

// 導(dǎo)入fs和thunkify模塊 var thunkify = require('thunkify'); var fs = require('fs');// 定義讀取文件的函數(shù)read var read = thunkify(fs.readFile);// 調(diào)用read函數(shù)讀取package.json下的文件.并對數(shù)據(jù)進行處理 read('pacage.json')(function(err, str) {console.log(err);console.log(str); }

以上是以同步方式書寫的,異步讀取文件并,對文件信息進行處理的操作…

下面是thinkify的源碼,閱讀一下就好…

function thunkify(fn) {return function() {// 傳入的參數(shù),放在數(shù)組args中var args = new Array(arguments.length);// 保存環(huán)境.放在ctx中var ctx = this;for (var i = 0; i < args.length; ++i) {args[i] = arguments[i];}return function (done) {var called;args.push(function () {if (called) return;called = true;done.apply(null, arguments);});try {fn.apply(ctx, args);} catch (err) {done(err);}}} };

看個實例:

function f(a, b, callback) {var sum = a + b;callback(sum);callback(sum); }var ft = thunkify(f); var print = console.log.bind(console); ft(1, 2)(print);

函數(shù)本質(zhì)上是對數(shù)據(jù)的處理,因此分析函數(shù)的一個比較好的方法是把參數(shù)都打出來,然后找到其中的聯(lián)系…
下面將幾個關(guān)鍵的數(shù)據(jù)打印到控制臺,

// 可以很清楚看見fn就是自己定義的f,對應(yīng)的語句就是var ft = thunkify(f). 和 function thunkify(fn)// args來自ft(1, 2)(print) 而 print 來自 var print = console.log.bind(console);對應(yīng)的再fhunkify中,是 (第一個)return 語句 args = new Array(arguments.length), for(var i = 0; i < args.length; ++i){args[i] = aguments[i];}// 在第2層return 里面接收參數(shù)給done,然后定義了一個called函數(shù)(確保回調(diào)函數(shù)只調(diào)用一次),具體實現(xiàn)在args.push里面,若已經(jīng)調(diào)用過,會return ,對應(yīng)if(called) return;經(jīng)過args.push后,可以看見args2變?yōu)?個., 即多了一個函數(shù)就是callback函數(shù),對應(yīng)實例也就是print = console.log.bind(console).// 最后是一個try...catch塊.嘗試使用f(a,b,callback).. 參數(shù)都在args里面// 這樣寫的好處是:異步實現(xiàn),方便閱讀.. 前面ft(1,2)可以是一個異步操作,如讀取文件,或ajax請求網(wǎng)頁數(shù)據(jù),后面是一個回調(diào)函數(shù)(cb),這樣就是一個同步的寫法..

參考《ES6標準入門》(第3版)P364~P365

總結(jié)

以上是生活随笔為你收集整理的es6 --- Thunkify源码分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。