由于本人一直是负责IOS和安卓端的开发,临时转去做小程序和h5的开发,对JS的很多语法概念都不熟悉,看到一些函数调用,一头雾水,因此对一些比较特别的语法做些记录;
1、三点操作...
解释:对象中的扩展运算符(...)用于取出参数对象中所有可遍历属性,拷贝到当前对方中
所以
reducers: {
save(state, { payload: data }) {
return { ...state, ...data };
},
},
就是将data的新的属性值,遍历覆盖到state中,并返回新的state
2、小程序异步封装操作
const promisify = original => {
return function(opt) {
return new Promise((resolve, reject) => {
opt = Object.assign({
success: resolve,
fail: reject
}, opt)
original(opt)
})
}
}
之后我们就可以这样调用
promisify(wx.getStorage)({key: 'testNum'}).then(value=> {
// success}).catch(reason=> {
// fail})
这个封装,涉及到了闭包,Promise、Object.assign和小程序的api,我们逐步分析
1)小程序的异步函数如:
wx.getStorage,获取本地缓存中的字段
函数 原型:
我们需要的参数有三个key,success和fail,
因为Promise函数就刚好有resolve和reject函数,因此我们new 一个Promise,并把resolve和reject和需要查询的key值通过
Object.assign合并成一个新的json参数对象,
然后通过original即传入的小程序异步函数调用,成功后就会调用then,失败则是catch
opt = Object.assign({
success: resolve,
fail: reject
}, opt)
这个函数,最终返回的还是一个promise对象,他只是把callback的模式(缩进的噩梦)更改成链式表达式
original => { return function }
是箭头函数,表示参数为original的闭包,这个闭包的返回本应在调用是再加个(),但是在闭包的最后一行已经通过
original()进行调用了
参考