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