Promise的基本用法(一)

1.Promise是什么?

Promise是異步編程的一種解決方案,在ES6中Promise被列為了正式規(guī)范须妻,統(tǒng)一了用法,原生提供了Promise對(duì)象泛领。

Promise打印出來的詳細(xì)信息
2.Promise的基本用法
  • then中成功失敗的執(zhí)行
// resolve代表成功 reject失敗 都是一個(gè)函數(shù)

let p = new Promise(function(reslove,reject){

    //reslove('成功')  //狀態(tài)由等待變?yōu)槌晒睦簦瑐鞯膮?shù)作為then函數(shù)中成功函數(shù)的實(shí)參

    reject('失敗')  //狀態(tài)由等待變?yōu)槭。瑐鞯膮?shù)作為then函數(shù)中失敗函數(shù)的實(shí)參

})

//then中有2個(gè)參數(shù)渊鞋,第一個(gè)參數(shù)是狀態(tài)變?yōu)槌晒髴?yīng)該執(zhí)行的回調(diào)函數(shù)绰更,第二個(gè)參數(shù)是狀態(tài)變?yōu)槭『髴?yīng)該執(zhí)行的回調(diào)函數(shù)。

p.then((data)=>{

    console.log('成功'+data)

},(err)=>{

    console.log('失敗'+err)

})
Promise承諾:默認(rèn)情況下是等待狀態(tài)pending锡宋,如果有一天狀態(tài)轉(zhuǎn)變?yōu)槌晒统晒α死芡澹绻麪顟B(tài)變成失敗就失敗了。狀態(tài)一旦改變了就不能再改變了执俩。

  • 如果then中返回了一個(gè)promise 會(huì)將promise的結(jié)果繼續(xù)傳給第二then中(如果結(jié)果是將狀態(tài)改成成功就走下一個(gè)then的成功回調(diào)徐钠,狀態(tài)改為失敗就走下一個(gè)then的失敗回調(diào))
function read( content ) {
    return new Promise(function( reslove,reject ) {
        setTimeout(function(){
                if(content>4){
                    resolve(content)
                }else{
                    reject('小于4')
                }
        },1000)
    })
}

read(1).then(( data )=>{
    console.log(data)
},( err )=>{
    console.log(err) //小于4
    return read(2) //將狀態(tài)改為了失敗
})
.then(( data )=>{
    console.log('data',data)
},( err )=>{
    console.log(err) //小于4
})

  • 第一個(gè)then不管是走成功還是失敗的回到函數(shù),只要返回一個(gè)普通值(不拋出錯(cuò)誤或者返回promise)役首,都會(huì)執(zhí)行下一個(gè)then的成功的回調(diào)尝丐。
let p = new Promise(function(reslove,reject){
    reject('失敗1')
})

p.then((data)=>{
    console.log('成功'+data)
},(err)=>{
    console.log('失敗'+err) //失敗失敗1
})
.then((data)=>{
    console.log('成功1'+data) //成功1undefined
},(err)=>{
    console.log('失敗1'+err)
})

eg:拋出錯(cuò)誤執(zhí)行下一個(gè)then的失敗

let p = new Promise(function(reslove,reject){
    reject('失敗1')
})

p.then((data)=>{
    console.log('成功'+data)
},(err)=>{
    console.log('失敗'+err) //失敗失敗1
})
.then((data)=>{
    console.log('成功1'+data) //成功1undefined
    throw Error('下一個(gè)失敗')
},(err)=>{
    console.log('失敗1'+err)
})
.then((data)=>{
    console.log('成功2'+data)
},(err)=>{
    console.log('失敗2'+err) //失敗2Error: 下一個(gè)失敗
})

  • catch的用法
catch可以實(shí)現(xiàn)錯(cuò)誤的捕獲 一般寫在最后,如果上面有自己的err會(huì)走自己的error衡奥。如果沒有寫就會(huì)走到catch
let p = new Promise(function(resolve,reject){
    reject('失敗')
});

p.then((data)=>{

},(err)=>{
    throw Error('錯(cuò)誤')
})
.then((data)=>{

},(err)=>{
    console.log(err+'自己的err') //走自己的(輸出:Error: 錯(cuò)誤自己的err)
    throw Error('錯(cuò)誤自己拋出的')
})
.then((data)=>{
//沒有自己的失敗處理函數(shù)爹袁,走catch
}).catch(e=>{
    console.log(e+'公共的err') //輸出:Error: 錯(cuò)誤自己拋出的公共的err
})

  • all的用法
Promise.all方法執(zhí)行后返回的依舊是promise, all兩個(gè)全成功才表示成功 。
function read(content) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve(content)
        }, 1000)
    })
}

let result = Promise.all([read(1), read(2)]);
result.then((data) => {
    console.log(data) //[ 1, 2 ]
})
有了all矮固,就可以并行執(zhí)行多個(gè)異步操作失息,并且在一個(gè)回調(diào)中處理所有的返回?cái)?shù)據(jù)。返回的數(shù)據(jù)與傳的參數(shù)數(shù)組的順序是一樣的档址。

  • race的用法
如果先成功了那就成功了, 如果先失敗了那就失敗了
function read(content) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            if(content>4){
                resolve(content)
            }else{
                reject(content)
            }
        }, 1000*content)
    })
}

let result = Promise.all([read(5), read(2)]);
result.then((data) => {
    console.log('成功'+data)
},(err)=>{
    console.log('失敗'+err) //失敗2
})

  • Promise的靜態(tài)方法
resolve:
Promise.resolve([1,2,3]).then(function(data){
    console.log(data); //[1,2,3]
});
reject:
Promise.reject([1,2,3]).then(null,function(err){
    console.log('err',err) //err [ 1, 2, 3 ]
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盹兢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辰晕,更是在濱河造成了極大的恐慌蛤迎,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件含友,死亡現(xiàn)場離奇詭異替裆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)窘问,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門辆童,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惠赫,你說我怎么就攤上這事把鉴。” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵庭砍,是天一觀的道長场晶。 經(jīng)常有香客問我,道長怠缸,這世上最難降的妖魔是什么诗轻? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮揭北,結(jié)果婚禮上扳炬,老公的妹妹穿的比我還像新娘。我一直安慰自己搔体,他們只是感情好恨樟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疚俱,像睡著了一般劝术。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上计螺,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天夯尽,我揣著相機(jī)與錄音,去河邊找鬼登馒。 笑死匙握,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陈轿。 我是一名探鬼主播圈纺,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼麦射!你這毒婦竟也來了蛾娶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤潜秋,失蹤者是張志新(化名)和其女友劉穎蛔琅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峻呛,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡罗售,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钩述。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寨躁。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牙勘,靈堂內(nèi)的尸體忽然破棺而出职恳,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布放钦,位于F島的核電站色徘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏最筒。R本人自食惡果不足惜贺氓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一蔚叨、第九天 我趴在偏房一處隱蔽的房頂上張望床蜘。 院中可真熱鬧,春花似錦蔑水、人聲如沸邢锯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丹擎。三九已至,卻和暖如春歇父,著一層夾襖步出監(jiān)牢的瞬間蒂培,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工榜苫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留护戳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓垂睬,卻偏偏與公主長得像媳荒,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驹饺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Promise 對(duì)象 Promise 的含義 Promise 是異步編程的一種解決方案钳枕,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,699評(píng)論 1 56
  • 目錄:Promise 的含義基本用法Promise.prototype.then()Promise.prototy...
    BluesCurry閱讀 1,490評(píng)論 0 8
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券赏壹,享受所有官網(wǎng)優(yōu)惠鱼炒,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 8,677評(píng)論 0 29
  • 最近真是寫不出東西,感覺好焦慮蝌借。昔瞧。。寫了一半都接不下去骨望,也發(fā)不出來硬爆。
    遠(yuǎn)逝之風(fēng)yuki閱讀 233評(píng)論 0 0
  • 已知結(jié)果悲涼, 何故過程荒唐擎鸠。 縱然開始美幻缀磕, 可憐最終倚驀然。 黃泉路上誰為伴, 奈何橋旁只身蕩袜蚕。 忘川河中心在...
    半世流離半世瘋閱讀 192評(píng)論 0 0