了解什么是 Promise 對象在項(xiàng)目中,會出現(xiàn)各種異步操作,如果一個異步操作的回調(diào)里還有異步操作,就會出現(xiàn)回調(diào)***。比如下面這種// 模擬獲取code,然后將code傳給后臺,成功后獲取userinfo,再將userinfo傳給后臺 ...
|
了解什么是 Promise 對象 在項(xiàng)目中,會出現(xiàn)各種異步操作,如果一個異步操作的回調(diào)里還有異步操作,就會出現(xiàn)回調(diào)***。 比如下面這種
// 模擬獲取code,然后將code傳給后臺,成功后獲取userinfo,再將userinfo傳給后臺
// 登錄
wx.login({
success: res => {
let code = res.code
// 請求
imitationPost({
url: '/test/loginWithCode',
data: {
code
},
success: data => {
// 獲取userInfo
wx.getUserInfo({
success: res => {
let userInfo = res.userInfo
// 請求
imitationPost({
url: '/test/saveUserInfo',
data: {
userInfo
},
success: data => {
console.log(data)
},
fail: res => {
console.log(res)
}
})
},
fail: res => {
console.log(res)
}
})
},
fail: res => {
console.log(res)
}
})
},
fail: res => {
console.log(res)
}
})
下面分析如何用Promise來進(jìn)行簡化代碼因?yàn)槲⑿判〕绦虍惒絘pi都是success和fail的形式,所有有人封裝了這樣一個方法: promisify.js
module.exports = (api) => {
return (options, ...params) => {
return new Promise((resolve, reject) => {
api(Object.assign({}, options, { success: resolve, fail: reject }), ...params);
});
}
}
先看最簡單的:
// 獲取系統(tǒng)信息
wx.getSystemInfo({
success: res => {
// success
console.log(res)
},
fail: res => {
}
})
使用上面的promisify.js簡化后:
const promisify = require('./promisify')
const getSystemInfo = promisify(wx.getSystemInfo)
getSystemInfo().then(res=>{
// success
console.log(res)
}).catch(res=>{
})
可以看到簡化后的回調(diào)里少了一個縮進(jìn),并且回調(diào)函數(shù)從9行減少到了6行。 回調(diào)***的簡化效果那么再來看看最開始的那個回調(diào)***
const promisify = require('./promisify')
const login = promisify(wx.login)
const getSystemInfo = promisify(wx.getSystemInfo)
// 登錄
login().then(res => {
let code = res.code
// 請求
pImitationPost({
url: '/test/loginWithCode',
data: {
code
},
}).then(data => {
// 獲取userInfo
getUserInfo().then(res => {
let userInfo = res.userInfo
// 請求
pImitationPost({
url: '/test/saveUserInfo',
data: {
userInfo
},
}).then(data => {
console.log(data)
}).catch(res => {
console.log(res)
})
}).catch(res => {
console.log(res)
})
}).catch(res => {
console.log(res)
})
}).catch(res => {
console.log(res)
})
可以看到簡化效果非常明顯。 同樣適用于網(wǎng)頁或者nodejs等中。 |