@qiniu/miku-delivery-mp-ks
Version:
Kuaishou Mini Program SDK for Miku Delivery
23 lines (22 loc) • 706 B
JavaScript
/**
* @file Asynchronous Task related helpers
*/
/** 对于异步行为,将同时发生的多次调用进行合并 */
export function collapseCalls(
/** 异步行为实现逻辑 */
fn,
/** 基于异步行为的调用参数计算标识(标识相同的调用才会被合并) */
getKey) {
const results = new Map();
return function fnWithCallsCollapsed(...args) {
const key = getKey(...args);
const fromCache = results.get(key);
if (fromCache != null)
return fromCache;
const ret = fn(...args);
results.set(key, ret);
const onSettled = () => results.delete(key);
ret.then(onSettled, onSettled);
return ret;
};
}