<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本瓜知道前不久寫的《JS 如何函數語言程式設計》系列各位可能並不感冒,因為一切理論的東西如果脫離實戰的話,那就將毫無意義。
於是乎,本瓜著手於實際工作開發,嘗試應用函數語言程式設計的一些思想。
最終驚人的發現:這個實現過程並不難,但是效果卻不小!
實現思路:藉助 compose 函數對連續的非同步過程進行組裝,不同的組合方式實現不同的業務流程。
這樣不僅提高了程式碼的可讀性,還提高了程式碼的擴充套件性。我想:這也許就是高內聚、低耦合吧~
撰此篇記之,並與各位分享。
在和產品第一次溝通了需求後,我理解需要實現一個應用 新建流程,具體是這樣的:
注:介面、引數有做一定簡化
上面除了第 3 步、第 5 步,剩下的都是要調介面的,並且前後步驟都有傳參的需要,可以理解為一個連續且有序的非同步呼叫過程。
為了快速響應產品需求,於是本瓜迅速寫出了以下程式碼:
/** * 新建流程 * @param {*} appId * @param {*} tag */ export const handleGetIframeSrc = function(appId, tag) { let h5Id // 第 1 步: 呼叫 sso 介面,獲取token getsingleSignOnToken({ formSource: tag }).then(data => { return new Promise((resolve, reject) => { resolve(data.result) }) }).then(token => { const para = { appId: appId } return new Promise((resolve, reject) => { // 第 2 步: 呼叫 create 介面,新建應用 appH5create(para).then(res => { // 第 3 步: 處理字串,拼接 Url this.handleInsIframeUrl(res, token, appId) this.setH5Id(res.result.h5Id) h5Id = res.result.h5Id resolve(h5Id) }).catch(err => { this.$message({ message: err.message || '出現錯誤', type: 'error' }) }) }) }).then(h5Id => { // 第 4 步:建立 websocket 連結; return new Promise((resolve, reject) => { webSocketInit(resolve, reject, h5Id) }) }).then(doclose => { // 第 5 步:拿到 websocket 後端推播關鍵字,渲染頁面; if (doclose) { this.setShowEditLink({ appId: appId, h5Id: h5Id, state: true }) } }).catch(err => { this.$message({ message: err.message || '出現錯誤', type: 'error' }) }) } const handleInsIframeUrl = function(res, token, appId) { // url 拼接 const secretId = this.$store.state.userinfo.enterpriseList[0].secretId let editUrl = res.result.editUrl const infoId = editUrl.substr(editUrl.indexOf('?') + 1, editUrl.length - editUrl.indexOf('?')) editUrl = res.result.editUrl.replace(infoId, `from=a2p&${infoId}`) const headList = JSON.parse(JSON.stringify(this.headList)) headList.forEach(i => { if (i.appId === appId) { i.srcUrl = `${editUrl}&token=${token}&secretId=${secretId}` } }) this.setHeadList(headList) }
這段程式碼是非常自然地根據產品所提需求,然後自己理解所編寫。
其實還可以,是吧?
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45