摘要:了解什么是對象在項目中,會出現(xiàn)各種異步操作,如果一個異步操作的回調(diào)里還有異步操作,就會出現(xiàn)回調(diào)金字塔。回調(diào)金字塔的簡化效果那么再來看看最開始的那個回調(diào)金字塔登錄請求獲取請求可以看到簡化效果非常明顯。同樣適用于網(wǎng)頁或者等中。
了解什么是 Promise 對象
在項目中,會出現(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來進行簡化代碼
因為微信小程序異步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); }); } }
先看最簡單的:
// 獲取系統(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)里少了一個縮進,并且回調(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等中。
參考Promise 對象
源代碼tomfriwel/MyWechatAppDemo 的promisePage頁面
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/107263.html
摘要:微信官方?jīng)]有給出來處理異步操作,而官方異步的又非常多,這使得多異步編程會層層回調(diào),代碼一復(fù)雜,回調(diào)起來就想砸電腦。是一個轉(zhuǎn)換微信小程序異步為的一個工具庫優(yōu)點避免小程序異步編程多次回調(diào)帶來的過多回調(diào)導(dǎo)致邏輯不清晰,篇幅過長等問題。 把微信小程序異步API轉(zhuǎn)化為Promise。用Promise處理異步操作有多方便,誰用誰知道。微信官方?jīng)]有給出Promise API來處理異步操作,而官方AP...
摘要:其實我們在同步流程中才說返回,異步?jīng)]有返回這個概念或者說異步返回是沒有意義的,異步對應(yīng)的是回調(diào),也就是說,對于一個異步函數(shù),我們應(yīng)該傳入一個回調(diào)函數(shù)來接收結(jié)果。 原文鏈接:https://www.xksblog.top/talk-... 見到wx.request的第一眼,就讓我想起了$.ajax這東西,使用起來確實有很多不方便,不能忍,幸好小程序是支持ES6語法的,所以可以使用pro...
摘要:化的原因微信小程序的用的是對象參數(shù)回調(diào)模式很容易造成回調(diào)地獄代碼難以閱讀判斷修改和調(diào)試微信小程序示例獲取用戶信息已經(jīng)授權(quán),可以直接調(diào)用獲取頭像昵稱,不會彈框可以將發(fā)送給后臺解碼出可以看出兩層的時候代碼就很別扭了化小程序編寫一個可以小程序的公 promise化的原因 微信小程序的api用的是對象參數(shù)回調(diào)模式,很容易造成回調(diào)地獄,代碼難以閱讀,判斷,修改 和調(diào)試. 微信小程序api示例 /...
摘要:組件化開發(fā)小程序在未出現(xiàn)組件之前,要重用的話,只能簡單復(fù)制粗暴黏貼組件化開發(fā)的優(yōu)勢可復(fù)用代碼分離,可維護更重要定義組件先創(chuàng)建文件夾用于存放組件,然后再創(chuàng)建組件文件夾注意組件的文件名并不是組件名,而頁面文件名是頁面名,組件名是引用時才確定的引 組件化開發(fā) 小程序在未出現(xiàn)組件之前,要重用的話,只能簡單(復(fù)制)粗暴(黏貼) 組件化開發(fā)的優(yōu)勢: 1、可復(fù)用(wxml/wxss/js) 2、代...
摘要:小程序的視圖層目前使用作為渲染載體,而邏輯層是由獨立的作為運行環(huán)境。比如小程序的,通信一次就像是寫情書所以,嚴格來說,小程序是微信定制的混合開發(fā)模式。出棧入棧解決小程序接口不支持的問題小程序的所有接口,都是通過傳統(tǒng)的回調(diào)函數(shù)形式來調(diào)用的。 作者:張利濤,視頻課程《微信小程序教學(xué)》、《基于Koa2搭建Node.js實戰(zhàn)項目教學(xué)》主編,滬江前端架構(gòu)師本文原創(chuàng),轉(zhuǎn)載請注明作者及出處 小程...
閱讀 2626·2023-05-11 16:55
閱讀 3659·2021-08-10 09:43
閱讀 2769·2019-08-30 15:44
閱讀 2603·2019-08-29 16:39
閱讀 725·2019-08-29 13:46
閱讀 2168·2019-08-29 13:29
閱讀 1071·2019-08-29 13:05
閱讀 831·2019-08-26 13:51