-
Notifications
You must be signed in to change notification settings - Fork 131
promisify() 方法解析
杨俊宁 edited this page Apr 16, 2018
·
4 revisions
本库的核心代码如下:
// 把普通函数变成promise函数
const promisify = (api) => {
return (options, ...params) => {
return new Promise((resolve, reject) => {
api(Object.assign({}, options, {
success: resolve,
fail: reject
}), ...params)
})
}
}
最外层传入 api
返回的是一个方法,该方法返回一个另一个方法(这个方法就是最后得到的方法),这个方法返回一个 Promise
对象。
用 wx.login
做个例子:
这里 wx.login 就成了这样一个方法:
const wx.login = (options, ...params) => {
return new Promise((resolve, reject) => {
//...
});
}
我们会把重构过的 wx.login
传递给 wx.pro.login
对象保存起来。
此时调用 wx.pro.login
的话就会得到一个 Promise
对象,就可以使用 then
和 catch
了:
wx.pro.login(options).then((res)=>{
//success
}).catch((res)=>{
//fail
})
...params
的话你可以试一下这个函数就知道是什么作用了:
function test(a, ...params) {
console.log('a='+a)
console.log(params)
}
大概意思就是可以传入任意长度的参数,比如 test(1, 11, 22)
除了第一个 a
,其他都会放在 params
里面,params
是一个数组。
a => 1
params => [11, 22]