0.3.0-beta4 • Published 8 years ago
use-polling v0.3.0-beta4
介绍
轮询在一些公司,一些没有推动 WebSocket 的公司,还是一个常用的套路。
但是,如果使用 setInterval or setTimeout 这种模式来写的话,总是要管理计时器,难免有些麻烦。
所以现在使用 Async Iterator 的概念,来包装一个简单的轮询工具。提升效率。
使用方式
const emojis = Array.from('🌚🌝👀😎😂😏🙁🤠');
const fakeAjax = () => {
const num = Math.random();
return num > 0.8 ? 'done' : emojis[~~(num * 10)];
};
// 非自定义
const pollingEmojis = usePolling(fakeAjax);
const letsPolling = pollingEmojis({
cycleMs: 2000,
predicate: res => res === 'done',
});
letsPolling(console.log);
const icanPolling = pollingEmojis({
cycleMs: 1000,
predicate: res => res === 'done',
customize: true,
});
// 自定义
void (async function foo() {
const iter = letsPolling();
let { value, done } = await iter.next();
for (let i = 0; i < 2 && !done; i += 1) {
console.log(value);
({ value, done } = await iter.next());
}
})();TODO
- 使用 Babel 7 的
async iterator来提升兼容性 - 一个可以提前中止轮询的方案
PS: 提前中止在目前的套路下,可能根本做不到。因为本来返回的就是一个 async function,
会自动转化成 Promise。这样就表示在 for await of 结束之前,这个返回的函数根本不可能运行。
所以,一个可能的方案因为是暴露一个配置项来判断,是需要自动做 for await 的操作,还是将
处理逻辑交给开发者自己。这样就能根据自己的意愿随时终止。
1.0.0
7 years ago
0.3.0
8 years ago
0.3.0-beta5
8 years ago
0.3.0-beta4
8 years ago
0.3.0-beta3
8 years ago
0.3.0-beta2
8 years ago
0.3.0-beta1
8 years ago
0.2.0
8 years ago
0.1.5
8 years ago
0.1.4
8 years ago
0.1.3
8 years ago
0.1.2-beta1
8 years ago
0.1.2
8 years ago
0.1.1
8 years ago
0.1.0
8 years ago