Promise異步操作

Promise含義:

Promise 是異步編程的一種解決方案家浇,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大

Promise對象的特點(diǎn)

Promise對象的狀態(tài)不受外界影響卤唉。只有異步操作的結(jié)果救鲤,可以決定當(dāng)前是哪一種狀態(tài),任何其他操作都無法改變這個(gè)狀態(tài)

一旦狀態(tài)改變胡控,就不會再變氮昧。Promise對象的狀態(tài)改變娶桦,只有兩種可能:從pending變?yōu)閒ulfilled和從pending變?yōu)閞ejected

Promise三種狀態(tài)

pending 準(zhǔn)備狀態(tài)

fulfilled 成功狀態(tài)(resolve)

rejected 失敗狀態(tài)(reject)

最終只有兩個(gè)狀態(tài),1狞悲、準(zhǔn)備 2撮抓、成功或者失敗

示例代碼:

// 參數(shù):回調(diào)函數(shù)
const p = new Promise(function(resolve, reject) {
  // 異步操作成功就調(diào)用 resolve
  // 異步操作失敗就調(diào)用 reject
  setTimeout(function(){
    resolve('resolve成功了')
    // 參數(shù):表示錯(cuò)誤信息
    // reject('出錯(cuò)了呀')
  }, 2000)
})
// 使用
p.then(function(data) {
  // data 表示成功的數(shù)據(jù)
  console.log('p操作成功', data)
  return 666
}).then(function(data1) {
  console.log(data1)
}).catch(function(err) {
  // err 表示錯(cuò)誤信息
  console.log(err)
})

Promise使用實(shí)例(解決了回調(diào)地獄問題)

.then方法可以傳遞兩個(gè)參數(shù),一個(gè)是成功的回調(diào)一個(gè)是失敗的回調(diào)

.then方法可以連寫效诅,但是連寫的時(shí)候一定要在上一個(gè).then方法中返回一個(gè)新的promise對象

示例代碼

function timeout(time){
    return new Promise(function(resolve, reject){
        setTimeout(function(){
            resolve()
        },time)
    })
}
timeout(1000)
    .then(function(){
        console.log('1s后執(zhí)行')
        return timeout(1000)
    }).then(function(){
        console.log('2s后執(zhí)行')
        return timeout(1000)
    }).then(function(){
        console.log('3s后執(zhí)行')
    })

Promise靜態(tài)方法Promise.all/race

Promise.all: 在所有的Promise異步操作完成之后胀滚,執(zhí)行某個(gè)任務(wù)就可以使用Promise.all

Promise.race: 在第一個(gè)Promise異步操作完成之后趟济,就執(zhí)行某個(gè)任務(wù)

示例代碼

function timeout(time){
    return new Promise(function(resolve, reject){
        setTimeout(function(){
            console.log('某個(gè)異步操作完成')
            resolve(Math.random())
        },time)
    })
}
var arr = [timeout(1000), timeout(3000), timeout(2000)]
Promise.all(arr).then(function(data){
    console.log('所有操作完成',data)
})
Promise.race(arr).then(function(data){
    console.log('第一個(gè)操作完成', data)
})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咽笼,隨后出現(xiàn)的幾起案子顷编,更是在濱河造成了極大的恐慌,老刑警劉巖剑刑,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件媳纬,死亡現(xiàn)場離奇詭異,居然都是意外死亡施掏,警方通過查閱死者的電腦和手機(jī)钮惠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來七芭,“玉大人素挽,你說我怎么就攤上這事±瓴担” “怎么了预明?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耙箍。 經(jīng)常有香客問我撰糠,道長,這世上最難降的妖魔是什么辩昆? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任阅酪,我火速辦了婚禮,結(jié)果婚禮上汁针,老公的妹妹穿的比我還像新娘术辐。我一直安慰自己,他們只是感情好扇丛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布术吗。 她就那樣靜靜地躺著,像睡著了一般帆精。 火紅的嫁衣襯著肌膚如雪较屿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天卓练,我揣著相機(jī)與錄音隘蝎,去河邊找鬼。 笑死襟企,一個(gè)胖子當(dāng)著我的面吹牛嘱么,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顽悼,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼曼振,長吁一口氣:“原來是場噩夢啊……” “哼几迄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冰评,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤映胁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后甲雅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體解孙,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年抛人,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弛姜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妖枚,死狀恐怖廷臼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盅惜,我是刑警寧澤中剩,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站抒寂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掠剑。R本人自食惡果不足惜屈芜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朴译。 院中可真熱鬧井佑,春花似錦、人聲如沸眠寿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盯拱。三九已至盒发,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狡逢,已是汗流浹背宁舰。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奢浑,地道東北人蛮艰。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像雀彼,于是被迫代替她去往敵國和親壤蚜。 傳聞我的和親對象是個(gè)殘疾皇子即寡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351