Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 1x 1x 1x 3x 1x 1x 2x 1x 1x 1x 1x 2x 2x 2x 1x 1x | /**
* 包装为一个条件触发管理器
* - 调用管理器的 ready 函数来激活条件。
* - 之前插入管理器的函数按队列顺序执行。
* - 之后插入管理器的函数立即执行。
* - 作用机制类似 jQuery.ready, 可以设置任何条件。
* @module fn/prepare
* @returns {Function} 条件触发管理器函数,传入一个 function 作为任务执行函数参数
* @example
* var $prepare = require('@spore-ui/kit/packages/fn/prepare');
* // 生成一个管理器函数 timeReady
* var timeReady = $prepare();
*
* // 设置条件为2秒后就绪
* setTimeout(function () {
* timeReady.ready();
* }, 2000);
*
* // 调用管理器函数 timeReady,插入要执行的任务函数
* timeReady(function () {
* // 2 秒后输出 1
* console.info(1);
* });
*
* // 调用管理器函数 timeReady,插入要执行的任务函数
* timeReady(function () {
* // 2 秒后输出 2
* console.info(2);
* });
*
* // 2100ms 后执行
* setTimeout(function () {
* // 调用管理器函数 timeReady,插入要执行的任务函数
* timeReady(function () {
* // 立即执行,输出 3
* console.info(3);
* });
* }, 2100);
*/
/**
* 激活任务管理器的触发条件,在此之前插入管理器的任务按队列顺序执行,之后插入的任务函数立即执行。
* @method prepare#ready
* @memberof prepare
*/
function prepare() {
var queue = [];
var condition = false;
var model;
var attampt = function (fn) {
if (condition) {
Eif (typeof fn === 'function') {
fn(model);
}
} else {
queue.push(fn);
}
};
attampt.ready = function (data) {
condition = true;
model = data;
while (queue.length) {
var fn = queue.shift();
Eif (typeof fn === 'function') {
fn(model);
}
}
};
return attampt;
}
module.exports = prepare;
|