chatGPT教我寫compose函數(shù)的詳細(xì)過程
0 前言
昨天希望實現(xiàn)一個通用的compose函數(shù),能夠接受同步函數(shù)與異步函數(shù),并且通過異步函數(shù)同步執(zhí)行來是吸納compose函數(shù)中的所有參數(shù)函數(shù)能順序執(zhí)行。
比如compose(asyncFun3,syncFun2,asyncFun1,syncFunc0),四個函數(shù)能從右到作順序執(zhí)行,并且完成參數(shù)從右向左的傳遞和處理。
昨兒花了很多,搜索到的結(jié)果質(zhì)量很低,于是今天試了試chatGPT。
只能說,chatGPT牛逼!
當(dāng)然,給出的答案有時會是錯的,需要甄別。
1 結(jié)果
給出結(jié)果的示例代碼,我這兒直接用純js,并且全放在vue的mounted中了,可以自行按需修改——
mounted() {
// 定義一個通用的 compose 函數(shù)
// 這個可以提取到公共函數(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過程概略


可以看到,chatGPT會給出直接的代碼實現(xiàn),并給出一個示例。此外,還會對這個代碼示例進(jìn)行解釋說明。

而當(dāng)我提出希望使用async/await來優(yōu)化代碼時,它也能做到代碼的修改

但是在代碼生成過程中,它沒有使用compose函數(shù),于是讓它再生成一份

可以發(fā)現(xiàn),在這里,chatGPT出現(xiàn)了第一次較大的錯誤,它給出的代碼無法運(yùn)行。
但是可以將報錯信息告知chatGPT,此時,它又能主動地修復(fù)bug,給出一份新的可運(yùn)行的代碼。

不過此時,chatGPT丟失了一開始定義的compose函數(shù),于是要求其用compose方法來實現(xiàn)

但是我還有一些沒懂的,于是繼續(xù)提出問題,chatGPT繼續(xù)給出詳細(xì)的解釋

前面只是做了console.log,我希望它添加參數(shù)在函數(shù)間傳遞

這里出現(xiàn)了第二處較大的問題
這里的代碼是沒有開頭我自己添加的那個Sync Function 2的,所以實際上返回值應(yīng)是150,也就是解釋中的數(shù)值,而非160

這里出現(xiàn)了一處小問題,syncFunc的num+10未生效確實是150和160區(qū)別的原因,但是和num+50的解釋是無關(guān)的

指出這個邏輯錯誤后,它重新生成了一份更加詳細(xì)的正確運(yùn)行過程解釋
3 最后
不得不說,chatGPT是真的牛逼
雖然在語意邏輯、代碼生成、代碼運(yùn)行等方面可能還存在一些問題
但是已經(jīng)非常好用了,遠(yuǎn)遠(yuǎn)勝于一般的傳統(tǒng)搜索引擎
可持續(xù)對話,搜索條件可持續(xù)添加,理解模糊語意,可進(jìn)行代碼定制化,代碼按需優(yōu)化,代碼問題修復(fù)…
而且還禮貌客氣,解釋詳細(xì),不厭其煩,奈斯
今天是第一天注冊chatgpt,第一次使用chatgpt,所以此文簡要做個記錄,寫這篇文章都讓我感覺自己就是個知識的搬運(yùn)工了…
所以,以后有問題,為何不問問萬能的chatgpt呢?
到此這篇關(guān)于chatGPT教我寫compose函數(shù)的文章就介紹到這了,更多相關(guān)chatGPT寫compose函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實現(xiàn)獲取word文檔內(nèi)容并輸出顯示到html頁面示例
這篇文章主要介紹了JS實現(xiàn)獲取word文檔內(nèi)容并輸出顯示到html頁面,結(jié)合實例形式分析了JavaScript使用ActiveXObject組建操作word文件的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-06-06
JS定時檢測任務(wù)任務(wù)完成后執(zhí)行下一步的解決辦法
這篇文章主要介紹了JS定時檢測任務(wù)任務(wù)完成后執(zhí)行下一步的解決辦法,需要的朋友可以參考下2016-12-12
JavaScript實現(xiàn)異步獲取表單數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)異步獲取表單數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-05-05
不刷新網(wǎng)頁就能鏈接新的js文件方法總結(jié)
在本篇文章里小編給大家整理的是關(guān)于不刷新網(wǎng)頁就能鏈接新的js文件方法總結(jié),需要的朋友們參考下。2020-03-03
JS對象轉(zhuǎn)換為Jquery對象實現(xiàn)代碼
很多新手朋友們都不知道js對象如何轉(zhuǎn)換為jquery對象,其實很簡單,下面有個不錯的示例,感興趣的朋友可以參考下2013-12-12
JavaScript實現(xiàn)LRU緩存淘汰算法的詳細(xì)步驟
這篇文章主要介紹了JavaScript實現(xiàn)LRU緩存淘汰算法,下面是用 JavaScript 實現(xiàn) LRU(Least RecentlyUsed,最近最少使用)緩存淘汰算法的代碼,并附上詳細(xì)的步驟解釋,需要的朋友可以參考下2024-12-12
blob轉(zhuǎn)換成string格式同步調(diào)用問題解決分析
這篇文章主要為大家介紹了blob轉(zhuǎn)換成string格式同步調(diào)用問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

