co原始碼解讀

2021-09-16 20:16:41 字數 2441 閱讀 8483

/**

* 提取slice()函式方便使用

*/var slice = array.prototype.slice;

/** * 暴露 `co`.

*/module.exports = co['default'] = co.co = co;

/** * 把generator函式 `fn` 包起來,返回promise

* this is a separate function so that

* every `co()` call doesn't create a new,

* unnecessary closure.

* * @param fn

* @return

* @api public

*/co.wrap = function (fn)

};/**

* 執行不帶引數的generator函式,返回promise

* * @param fn

* @return

* @api public

*/function co(gen)

*/function onfulfilled(res) catch (e)

next(ret);

return null;

}/**

* 自己捕獲err

* 注意,這裡是呼叫generator遍歷器上的throw方法

* 乙個generator執行出錯後就不再執行,返回,故這裡呼叫next函式會在第乙個if結束

*/function onrejected(err) catch (e)

next(ret);

}/**

* 首先檢查是否結束

* 沒有結束就把結果value轉化為promise型別

* 轉化成功就執行promise,這裡是被onfulfilled呼叫,現在又反過去呼叫onfulfilled,形成遞迴。

* 失敗就呼叫onrejected函式

*/function next(ret)

});}/**

* convert a `yield`ed value into a promise.

* * @param obj

* @return

* @api private

*/function topromise(obj)

/** * convert a thunk to a promise.

* * @param

* @return

* @api private

*/function thunktopromise(fn) );

});}/**

* convert an array of "yieldables" to a promise.

* uses `promise.all()` internally.

* * @param obj

* @return

* @api private

*/function arraytopromise(obj)

/** * convert an object of "yieldables" to a promise.

* uses `promise.all()` internally.

* * @param obj

* @return

* @api private

*/function objecttopromise(obj)

return promise.all(promises).then(function () );

function defer(promise, key) ));

}}/** * check if `obj` is a promise.

* * @param obj

* @return

* @api private

*/function ispromise(obj)

/** * check if `obj` is a generator.

* * @param obj

* @return

* @api private

*/function isgenerator(obj)

/** * check if `obj` is a generator function.

* * @param obj

* @return

* @api private

*/ function isgeneratorfunction(obj)

/** * check for plain object.

* * @param val

* @return

* @api private

*/function isobject(val)

openTLD 原始碼解讀

首先是run tld 在其次就是tldexample 最後到了初始化函式tldinit 第乙個比較關鍵的函式 bb scan 將影象網格化,將首先 scale 1.2.10 10 21 個規格 在每個規格上打網格 這個函式有乙個比較重要的方法 ntuples 就是重複 因為網格上的點很多點有相同的x...

thinkphp原始碼解讀

thinkphp原始碼解讀 thinkphp原始碼的根目錄下是 index.php,是系統預設的 主頁,index.php中首先檢測的是 php執行環境,如果php版本小於 5.3.0則退出執行,定義是否為除錯模式,定義應用目錄,引入入口檔案。thinkphp是整個框架的入口檔案,在thinkphp...

HashMap原始碼解讀

一 建立乙個hashmap都做了哪些工作?mapmap new hashmap hahmap無參構造方法 public hashmap 可以看到設定了載入因子 預設0.75 閾值 預設容量16 預設載入因子0.75 12 table是hashmap內部資料儲存結構entry陣列。當hashmap的s...