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