async中提供了幾個工具類,給我們提供一些小便利:
memoize
unmemoize
logdir
noconflict
1. memoize(fn, [hasher])
有一些方法比較耗時,且對於相同的輸入總是有相同的輸出。這時可以使用memoize給它加個快取,對於相同的引數只計算一次,以後就直接從快取中取結果用了。
比如這裡有乙個很慢的函式:
var slow_fn = function(x, y, callback) ;可以用memoize生成乙個新的帶快取的函式:
var fn = async.memoize(slow_fn);試試同樣引數呼叫兩次:
fn(『a』,'b』, function(err, result) );注意memoize的引數中還有乙個hasher,它是做什麼用的呢?它可以讓我們自定義如果根據引數來判斷是否從快取中取。預設情況下,兩次呼叫,只有引數完全一樣的時候才會從快取中取。這裡我們使用hasher來改變規則。// 直接得到之前計算好的值
fn(『a』,'b』, function(err, result) );
var fn_hasher = async.memoize(slow_fn, function(x,y) );新定義的這個,將根據兩個引數的和來判斷。
fn_hasher(『cd』,'e』, function(err, result) );第二次的呼叫,雖然引數跟第一次不一樣,但是其和卻一樣,所以直接從快取中拿到前次執行結果。fn_hasher(『c』,'de』, function(err, result) );
2. unmemoize(fn)
unmemoize的作用正好跟memoize相反,它可以把乙個帶快取的函式再變回原樣:
var fn2 = async.unmemoize(fn);經過unmemoize後,再執行該函式就得重新運算了。console.log(『unmemoized』);
fn2(『a』,'b』, function(err,result) );
3. log(function, arguments)
log用於快速執行某非同步函式,並記錄它的返回值。試驗函式時很方便,不用寫那些固定模式的**。
var x = function()列印結果如下:var hello = function(name, callback) );
}, 200);
};async.log(hello, 『world』);
hello world可以看到,它直接執行了該函式,並以每行乙個引數的形式列印出了結果。nice to see you world
[function]
4. dir(function, arguments)
該函式與log非常像,不同之處在於,它最終呼叫了console.dir,而log最終呼叫了console.log。
看看使用dir列印的效果如何:
async.dir(hello, 『world』);結果:
『hello world』僅僅是多了幾個單引號。為了弄清楚dir存在的意義(什麼情況下應該使用dir而不是log),我提了乙個問題,參看: ... c-log-and-async-dir" href="ns/10636866/whats-the-difference-between-async-log-and-async-dir"> ... c-log-and-async-dir『nice to see you world』
[function]
5. noconflict
最後是這個noconflict,它僅僅用於瀏覽器端,在nodejs中沒用,這裡無法演示。
它的作用是:如果之前已經在全域性域中定義了async變數,當匯入本async.js時,會先把之前的async變數儲存起來,然後覆蓋它。用完之後,呼叫noconflict()方法,就會歸還該值。同時返回async本身供換名使用。
這裡可以看一下它的實現**:
// global on the server, window in the browser可以看到,當處於nodejs或者commonjs環境中,它會執行module.exports=async,在其它情況下(通常為瀏覽器端)才會root.async=async,將async賦值給root。var root = this,
previous_async = root.async;
if (typeof module !== 『undefined』 && module.exports)
else
async.noconflict = function () ;
在瀏覽器中的用法如下:
Git詳解之二 Git基礎3
除了定製輸出格式的選項之外,git log還有許多非常實用的限制輸出長度的選項,也就是只輸出部分提交資訊。之前我們已經看到過 2了,它只顯示最近的兩條提交,實際上,這是 選項的寫法,其中的n可以是任何自然數,表示僅顯示最近的若干條提交。不過實踐中我們是不太用這個選項的,git 在輸出所有提交時會自動...
Threejs之二 相機詳解
所謂透視投影相機 perspectivecamera 基本等同於人的眼睛,意思就是 離的遠的物體會顯得比較小,近處的物體會比較大.透視投影相機的建構函式 perspectivecamera fov,aspect,near,far 複製 根據上圖來理解透視投影相機的4個引數 for 我理解為眼睛睜開的...
SpringMvc之引數繫結註解詳解之二
cousumes的樣例 1 controller 3 public voidaddpet requestbody pet pet,model model produces的樣例 1 controller 3 responsebody 4 publicpet getpet pathvariable s...