知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷(xiāo)的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷(xiāo)工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >
微信小程序:使用Promise簡(jiǎn)化回調(diào)
發(fā)表時(shí)間:2021-3-31
發(fā)布人:葵宇科技
瀏覽次數(shù):47
了解什么是 Promise 對(duì)象
在項(xiàng)目中,會(huì)出現(xiàn)各種異步操作,如果一個(gè)異步操作的回調(diào)里還有異步操作,就會(huì)出現(xiàn)回調(diào)金字塔。
比如下面這種
// 模擬獲取code,然后將code傳給后臺(tái),成功后獲取userinfo,再將userinfo傳給后臺(tái)
// 登錄
wx.login({
success: res => {
let code = res.code
// 請(qǐng)求
imitationPost({
url: '/test/loginWithCode',
data: {
code
},
success: data =https://www.wxapp-union.com/> {
// 獲取userInfo
wx.getUserInfo({
success: res => {
let userInfo = res.userInfo
// 請(qǐng)求
imitationPost({
url: '/test/saveUserInfo',
data: {
userInfo
},
success: data =https://www.wxapp-union.com/> {
console.log(data)
},
fail: res => {
console.log(res)
}
})
},
fail: res => {
console.log(res)
}
})
},
fail: res => {
console.log(res)
}
})
},
fail: res => {
console.log(res)
}
})
下面分析如何用Promise來(lái)進(jìn)行簡(jiǎn)化代碼
因?yàn)槲⑿判〕绦虍惒絘pi都是success和fail的形式,所有有人封裝了這樣一個(gè)方法:
promisify.js
module.exports = (api) => {
return (options, ...params) => {
return new Promise((resolve, reject) => {
api(Object.assign({}, options, { success: resolve, fail: reject }), ...params);
});
}
}
先看最簡(jiǎn)單的:
// 獲取系統(tǒng)信息
wx.getSystemInfo({
success: res => {
// success
console.log(res)
},
fail: res => {
}
})
使用上面的promisify.js
簡(jiǎn)化后:
const promisify = require('./promisify')
const getSystemInfo = promisify(wx.getSystemInfo)
getSystemInfo().then(res=>{
// success
console.log(res)
}).catch(res=>{
})
可以看到簡(jiǎn)化后的回調(diào)里少了一個(gè)縮進(jìn),并且回調(diào)函數(shù)從9行減少到了6行。
回調(diào)金字塔的簡(jiǎn)化效果
那么再來(lái)看看最開(kāi)始的那個(gè)回調(diào)金字塔
const promisify = require('./promisify')
const login = promisify(wx.login)
const getSystemInfo = promisify(wx.getSystemInfo)
// 登錄
login().then(res => {
let code = res.code
// 請(qǐng)求
pImitationPost({
url: '/test/loginWithCode',
data: {
code
},
}).then(data => {
// 獲取userInfo
getUserInfo().then(res => {
let userInfo = res.userInfo
// 請(qǐng)求
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)
})
可以看到簡(jiǎn)化效果非常明顯。
同樣適用于網(wǎng)頁(yè)或者nodejs等中。
參考
- Promise 對(duì)象
源代碼
- tomfriwel/MyWechatAppDemo 的
promisePage
頁(yè)面
相關(guān)案例查看更多
相關(guān)閱讀
- 小程序退款
- 網(wǎng)絡(luò)公司哪家好
- 網(wǎng)站建設(shè)招商
- 云南百度小程序
- 云南小程序定制
- 網(wǎng)站建設(shè)選
- 云南網(wǎng)站維護(hù)
- 網(wǎng)站開(kāi)發(fā)公司哪家好
- 前端開(kāi)發(fā)
- 網(wǎng)站建設(shè)服務(wù)
- 百度推廣
- 云南網(wǎng)絡(luò)營(yíng)銷(xiāo)
- 云南網(wǎng)站建設(shè)首頁(yè)
- 云南網(wǎng)站建設(shè)報(bào)價(jià)
- 開(kāi)通微信小程序被騙
- 云南網(wǎng)站建設(shè)電話(huà)
- 云南微信小程序開(kāi)發(fā)
- 汽車(chē)拆解管理系統(tǒng)
- 霸屏推廣
- 百度人工排名
- 昆明軟件公司
- 網(wǎng)站上首頁(yè)
- 云南手機(jī)網(wǎng)站建設(shè)
- 云南網(wǎng)站制作哪家好
- 網(wǎng)站制作哪家好
- 小程序
- 大理網(wǎng)站建設(shè)公司
- 怎么做網(wǎng)站
- 網(wǎng)站建設(shè)
- 國(guó)內(nèi)知名網(wǎng)站建設(shè)公司排名