我們知道Promise是一個(gè)高階函數(shù),Promise可以作為參數(shù)繼續(xù)傳參Promise,那么我出這樣一道題你會不會繞進(jìn)去呢?希望你沒有!
第一題的重點(diǎn):練習(xí)返回一個(gè)resolve
function foo() {
return Promise.resolve('aaa')
.then(data => { console.log("then1: ", data); })
.then(data => { console.log("then2: ", data); return 'bbb'; })
.then(data => { console.log("then3: ", data); return Promise.resolve('ccc'); })
.catch(err => { console.log("eee"); return Promise.reject('eee'); });
}
console.log("111")
foo()
.then(data => { console.log("333: ", data); })
.catch(err => { console.log("eee"); return 'ggg' });
console.log("222")
第二題的重點(diǎn):練習(xí)返回一個(gè)reject
function foo() {
return Promise.resolve('aaa')
.then(data => { console.log("then1: ", data); })
.then(data => { console.log("then2: ", data); return 'bbb'; })
.then(data => { console.log("then3: ", data); return Promise.reject('ccc'); })
.catch(err => { console.log("eeee1: ", err); return Promise.reject('ddd'); });
}
console.log("111")
foo()
.then(data => { console.log("333: ", data); })
.catch(err => { console.log("eeee2"); return 'ggg' });
console.log("222")
到這里,我建議你先不要直接拷貝到編輯器運(yùn)行,而是稍作思考,然后直接把答案寫出來,再運(yùn)行也不遲,如果運(yùn)行結(jié)果和你手寫的一樣,那么恭喜你,你已經(jīng)完全掌握了
好了,答案我會放到最后,接下來先復(fù)習(xí)兩個(gè)重要知識點(diǎn):
高階函數(shù)
如果一個(gè)函數(shù)符合下面2個(gè)規(guī)范中的任何一個(gè),那該函數(shù)就是高階函數(shù)
- 若A函數(shù),接收的參數(shù)是一個(gè)函數(shù),那么A就可以稱之為高階函數(shù)
- 若A函數(shù),調(diào)用的返回值依然是一個(gè)函數(shù),那么A就可以稱之為高階函數(shù)
常見的高階函數(shù)有:Promise,setTimeout、arr.map 等等
- 若A函數(shù),調(diào)用的返回值依然是一個(gè)函數(shù),那么A就可以稱之為高階函數(shù)
函數(shù)的柯里化
通過函數(shù)調(diào)用繼續(xù)返回函數(shù)的方式,實(shí)現(xiàn)多次接收參數(shù)最后統(tǒng)一處理的函數(shù)編碼形式。
最后直接拋出答案:
第一題答案:
$ node test.js
111
222
then1: aaa
then2: undefined
then3: bbb
333: ccc
第二題答案:
$ node test.js
111
222
then1: aaa
then2: undefined
then3: bbb
eeee1: ccc
eeee2
點(diǎn)贊加關(guān)注,永遠(yuǎn)不迷路
每天一更新,創(chuàng)作拿命拼