入职的新公司,刚开始维护老项目,里面有很多jQuery代码,现在需要增加一个新需求,需要执行三个并行的异步操作,加载通用模板,加载数据,layui加载插件模块,正好以前阅读深入浅出nodejs学习了偏函数,现在正好使用和熟悉一下。
layui.use(['laytpl'], function () {
laytpl = layui.laytpl
loadData('url', function (data) {
loadHtml('templateAddress', renderHtml(tpl,data))
})
})
function render (collectDone) {
let cache = {
laytpl: null,
data: null,
html: ''
}
function cacheFill () {
for (let key in cache) {
if (!cache[key]) {
return false
}
}
return true
}
return function (key, data) {
cache[key] = data
if (cacheFill()) {
collectDone(cache)
}
}
}
let renderCollect = render(renderFn)
layui.use(['laytpl'], () => renderCollect('laytpl', layui.laytpl))
loadData('url', (data) => renderCollect('data', data))
loadHtml('htmlPath', html => renderCollect('html', html))
现在可以结合例子来说下什么是偏函数了,偏函数本质是创建一个可以调用另外一个部分(render中)参数或者变量已经预设的函数(renderCollect),其实这种函数包装函数的做法在js中应用的很多,待有时间再更新
题外话,多个异步并行请求对应一个操作,并且开发支持es6 环境,可以用Promise.all([PromiseList])哦,不过PromiseList里面的成员要是Promise实例