您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“微信小程序中Promise簡化回調的方法”,內容詳細,步驟清晰,細節處理妥當,希望這篇“微信小程序中Promise簡化回調的方法”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
所謂Promise,簡單說就是一個容器,里面保存著某個未來才會結束的事件(通常是一個異步操作)的結果。從語法上說,Promise 是一個對象,從它可以獲取異步操作的消息。Promise 提供統一的 API,各種異步操作都可以用同樣的方法進行處理。
了解什么是 Promise 對象
在項目中,會出現各種異步操作,如果一個異步操作的回調里還有異步操作,就會出現回調金字塔。
比如下面這種
// 模擬獲取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來進行簡化代碼
因為微信小程序異步api都是success和fail的形式,所有有人封裝了這樣一個方法:
promisify.js
module.exports = (api) => { return (options, ...params) => { return new Promise((resolve, reject) => { api(Object.assign({}, options, { success: resolve, fail: reject }), ...params); }); } }
先看最簡單的:
// 獲取系統信息 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=>{ })
getSystemInfo
可以看到簡化后的回調里少了一個縮進,并且回調函數從9行減少到了6行。
回調金字塔的簡化效果
那么再來看看最開始的那個回調金字塔
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) })
簡化回調
可以看到簡化效果非常明顯。
同樣適用于網頁或者nodejs等中。
讀到這里,這篇“微信小程序中Promise簡化回調的方法”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。