chatGPT教我寫compose函數(shù)的詳細(xì)過(guò)程
0 前言
昨天希望實(shí)現(xiàn)一個(gè)通用的compose函數(shù),能夠接受同步函數(shù)與異步函數(shù),并且通過(guò)異步函數(shù)同步執(zhí)行來(lái)是吸納compose函數(shù)中的所有參數(shù)函數(shù)能順序執(zhí)行。
比如compose(asyncFun3,syncFun2,asyncFun1,syncFunc0)
,四個(gè)函數(shù)能從右到作順序執(zhí)行,并且完成參數(shù)從右向左的傳遞和處理。
昨兒花了很多,搜索到的結(jié)果質(zhì)量很低,于是今天試了試chatGPT。
只能說(shuō),chatGPT牛逼!
當(dāng)然,給出的答案有時(shí)會(huì)是錯(cuò)的,需要甄別。
1 結(jié)果
給出結(jié)果的示例代碼,我這兒直接用純js,并且全放在vue的mounted中了,可以自行按需修改——
mounted() { // 定義一個(gè)通用的 compose 函數(shù) // 這個(gè)可以提取到公共函數(shù)去 const compose = (...fns) => { return fns.reduceRight((prevFn, nextFn) => { return async (...args) => { return nextFn(await prevFn(...args)); }; }); }; const asyncFunc1 = () => { return new Promise(resolve => { setTimeout(() => { console.log('Async Function 1'); resolve(100); }, 1000); }); }; const asyncFunc2 = num => { return new Promise(resolve => { setTimeout(() => { console.log('Async Function 2'); resolve(num + 50); }, 500); }); }; const syncFunc = num => { console.log(num) console.log('Sync Function'); return num + 10; }; const syncFunc2 = num => { console.log(num) console.log('Sync Function 2'); return num + 10; }; const runAllAsyncFunctions = compose(asyncFunc2, syncFunc2, asyncFunc1, syncFunc); const run = async () => { const result = await runAllAsyncFunctions(); console.log('All functions completed'); console.log('Result:', result); }; run(); }
運(yùn)行結(jié)果如下——
undefined
Sync Function
Async Function 1
100
Sync Function 2
Async Function 2
All functions completed
Result: 160
2 chatGPT過(guò)程概略
可以看到,chatGPT會(huì)給出直接的代碼實(shí)現(xiàn),并給出一個(gè)示例。此外,還會(huì)對(duì)這個(gè)代碼示例進(jìn)行解釋說(shuō)明。
而當(dāng)我提出希望使用async/await來(lái)優(yōu)化代碼時(shí),它也能做到代碼的修改
但是在代碼生成過(guò)程中,它沒有使用compose函數(shù),于是讓它再生成一份
可以發(fā)現(xiàn),在這里,chatGPT出現(xiàn)了第一次較大的錯(cuò)誤,它給出的代碼無(wú)法運(yùn)行。
但是可以將報(bào)錯(cuò)信息告知chatGPT,此時(shí),它又能主動(dòng)地修復(fù)bug,給出一份新的可運(yùn)行的代碼。
不過(guò)此時(shí),chatGPT丟失了一開始定義的compose函數(shù),于是要求其用compose方法來(lái)實(shí)現(xiàn)
但是我還有一些沒懂的,于是繼續(xù)提出問(wèn)題,chatGPT繼續(xù)給出詳細(xì)的解釋
前面只是做了console.log,我希望它添加參數(shù)在函數(shù)間傳遞
這里出現(xiàn)了第二處較大的問(wèn)題
這里的代碼是沒有開頭我自己添加的那個(gè)Sync Function 2
的,所以實(shí)際上返回值應(yīng)是150
,也就是解釋中的數(shù)值,而非160
這里出現(xiàn)了一處小問(wèn)題,syncFunc
的num+10
未生效確實(shí)是150
和160
區(qū)別的原因,但是和num+50
的解釋是無(wú)關(guān)的
指出這個(gè)邏輯錯(cuò)誤后,它重新生成了一份更加詳細(xì)的正確運(yùn)行過(guò)程解釋
3 最后
不得不說(shuō),chatGPT是真的牛逼
雖然在語(yǔ)意邏輯、代碼生成、代碼運(yùn)行等方面可能還存在一些問(wèn)題
但是已經(jīng)非常好用了,遠(yuǎn)遠(yuǎn)勝于一般的傳統(tǒng)搜索引擎
可持續(xù)對(duì)話,搜索條件可持續(xù)添加,理解模糊語(yǔ)意,可進(jìn)行代碼定制化,代碼按需優(yōu)化,代碼問(wèn)題修復(fù)…
而且還禮貌客氣,解釋詳細(xì),不厭其煩,奈斯
今天是第一天注冊(cè)chatgpt,第一次使用chatgpt,所以此文簡(jiǎn)要做個(gè)記錄,寫這篇文章都讓我感覺自己就是個(gè)知識(shí)的搬運(yùn)工了…
所以,以后有問(wèn)題,為何不問(wèn)問(wèn)萬(wàn)能的chatgpt呢?
到此這篇關(guān)于chatGPT教我寫compose函數(shù)的文章就介紹到這了,更多相關(guān)chatGPT寫compose函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡(jiǎn)潔短小的 JavaScript IE 瀏覽器判定代碼
IE瀏覽器不管是什么版本,總是跟Web標(biāo)準(zhǔn)有些不太兼容。對(duì)于代碼工作者來(lái)說(shuō),自然是苦不堪言,為了考慮IE的兼容問(wèn)題,不管是寫 CSS 還是 JS,往往都要對(duì) IE 特別對(duì)待,這就少不了做些判斷。本文不討論如何區(qū)分 IE 的樣式,僅是 JS 判定 IE 瀏覽器。2010-03-03element el-input 刪除邊框的實(shí)現(xiàn)
本文主要介紹了element el-input 刪除邊框的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04JavaScript最全公共方法匯總并解析(前端開發(fā)收藏必備)
JavaScript掌握各種常用的公共方法更是提升開發(fā)效率和代碼質(zhì)量的關(guān)鍵,無(wú)論你是初學(xué)者還是資深開發(fā)者,了解并熟練運(yùn)用這些方法都能讓你的代碼更加簡(jiǎn)潔、高效,本篇博客將為你詳細(xì)匯總并解析最全的JavaScript公共方法,涵蓋數(shù)組、對(duì)象、字符串、日期等各個(gè)方面的常用技巧2024-06-06淺談Webpack自動(dòng)化構(gòu)建實(shí)踐指南
本篇文章主要介紹了Webpack自動(dòng)化構(gòu)建實(shí)踐指南,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Javascript合并表格中具有相同內(nèi)容單元格示例
表格相同內(nèi)容單元格的合并在以前也有過(guò)類似的教程,本文為大家講解的是使用Javascript合并,具體示例及效果圖如下,感興趣的朋友可以參考下2013-08-08js中用window.open()打開多個(gè)窗口的name問(wèn)題
這篇文章主要介紹了js中用window.open()打開多個(gè)窗口的問(wèn)題,需要的朋友可以參考下2014-03-03