中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

NodeJS的Promise的用法解析
來源:易賢網(wǎng) 閱讀:1588 次 日期:2016-07-02 14:02:34
溫馨提示:易賢網(wǎng)小編為您整理了“NodeJS的Promise的用法解析”,方便廣大網(wǎng)友查閱!

下面小編就為大家?guī)硪黄狽odeJS的Promise的用法解析。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考

Javascript的特點(diǎn)是異步,Javascript不能等待,如果你實(shí)現(xiàn)某件需要等待的事情,你不能停在那里一直等待結(jié)果回來,相反,底線是使用回調(diào)callback:你定義一個函數(shù),這個函數(shù)只有等到結(jié)果可用時才能被調(diào)用。

這種回調(diào)模型對于好的代碼組織是沒有問題的,但是也可以通過從原始回調(diào)切換到promise解決很多問題,將promise看成是一個標(biāo)準(zhǔn)的數(shù)據(jù)容器,這樣會簡化你的代碼組織,可以成為基于promise的架構(gòu)。

什么是Promise?

一個promise是一個帶有".then()"方法的對象,其代表的是一個操作的結(jié)果可能還沒有或不知道,無論誰訪問這個對象,都能夠使用".then()"方法加入回調(diào)等待操作出現(xiàn)成功結(jié)果或失敗時的提醒通知,。

那么為什么這樣做好處優(yōu)于回調(diào)呢?標(biāo)準(zhǔn)的回調(diào)模式在我們處理請求時需要同時提供回調(diào)函數(shù):

request(url, function(error, response) { 

 // handle success or error.

});

doSomethingElse(); 

很不幸,這段代碼意味著這個request函數(shù)并不知道它自己什么時候能夠完成,當(dāng)然也沒有必要,我們最終通過回調(diào)傳遞結(jié)果。這會導(dǎo)致多個回調(diào)形成了嵌套回調(diào),或者稱為回調(diào)陷阱。

queryTheDatabase(query, function(error, result) { 

 request(url, function(error, response) {

  doSomethingElse(response, function(error, result) {

   doAnotherThing(result, function(error, result) {

    request(anotherUrl, function(error, response) {

     ...

    });

   });

  });

 });

});

Promise能夠解決這種問題,允許低層代碼創(chuàng)建一個request然后返回一個對象,其代表著未完成的操作,讓調(diào)用者去決定應(yīng)該加入什么回調(diào)。

Promise是什么?

promise是一個異步編程的抽象,它是一個返回值或拋出exception的代理對象,一般promise對象都有一個then方法,這個then方法是我們?nèi)绾潍@得返回值(成功實(shí)現(xiàn)承諾的結(jié)果值,稱為fulfillment)或拋出exception(拒絕承諾的理由,稱為rejection),then是用兩個可選的回調(diào)作為參數(shù),我們可以稱為onFulfilled和OnRejected:

var promise = doSomethingAync()

promise.then(onFulfilled, onRejected)

當(dāng)這個promise被解決了,也就是異步過程完成后,onFulfilled和OnRejected中任何一個將被調(diào)用,

因此,一個promise有下面三個不同狀態(tài):

■pending待承諾 - promise初始狀態(tài)

■fulfilled實(shí)現(xiàn)承諾 - 一個承諾成功實(shí)現(xiàn)狀態(tài)

■rejected拒絕承諾 - 一個承諾失敗的狀態(tài)

以讀取文件為案例,下面是使用回調(diào)實(shí)現(xiàn)讀取文件后應(yīng)該做什么事情(輸出打印):

readFile(function (err, data) {

 if (err) return console.error(err)

 console.log(data)

})

如果我們的readFile函數(shù)返回一個promise,那么我們可以如下實(shí)現(xiàn)同樣的邏輯(輸出打印):

var promise = readFile()

promise.then(console.log, console.error)

這里我們有了一個值promise代表的是異步操作,我們能夠一直傳遞這個值promise,任何人訪問這個值都能夠使用then來消費(fèi)使用它,無論這個值代表的異步操作是否完成或沒有完成,我們也能保證異步的結(jié)果不會改變,因?yàn)檫@個promise代表的異步操作只會執(zhí)行一次,狀態(tài)是要么fulfilled要么是rejected。

理解Promise

Promise可能是不同于日常直覺,為了理解它,一些重要原理必須記牢: .then()總是返回一個新的promise.,如下面代碼:

var promise = readFile()

var promise2 = promise.then(readAnotherFile, console.error)

這里then的參數(shù)readAnotherFile, console.error是代表異步操作成功后的動作onFulfilled或失敗后的動作OnRejected,也就是說,讀取文件成功后執(zhí)行readAnotherFile函數(shù),否則失敗打印記錄錯誤。這種實(shí)現(xiàn)是兩個中只有一種可能。

我們再看下面上述代碼如下:

var promise = readFile()

var promise2 = promise.then(function (data) {

 return readAnotherFile() // 如果readFile成功,執(zhí)行readAnotherFile

}, function (err) {

 console.error(err) // 如果readFile不成功,記錄,但是還是執(zhí)行readAnotherFile

 return readAnotherFile()

})

promise2.then(console.log, console.error) // readAnotherFile函數(shù)的執(zhí)行結(jié)果

因?yàn)閠hen返回一個promise,它意味著promise能夠被chain串行鏈條花,這樣能避免回調(diào)地獄:

readFile()

 .then(readAnotherFile)

 .then(doSomethingElse)

 .then(...)

Promise法則有兩部分必須分離:

(1).then()總是返回一個新的promise,每次你調(diào)用它,它不管回調(diào)做什么,因?yàn)?then()在回調(diào)被調(diào)用之前已經(jīng)給了你一個承諾promise,回調(diào)的行為只影響承諾promise的實(shí)施,如果回調(diào)返回一個值,那么promise將使用那個值,如果這個值是一個promise,返回這個promise實(shí)施后的值給這個值,如果回調(diào)拋出錯誤,promise將拒絕錯誤。

(2)被.then()返回的promise是一個新的promise,它不同于那些.then()被調(diào)用的promise,promise長長的鏈條有時會好些隱藏這個事實(shí),不管如何,每次.then()調(diào)用都會產(chǎn)生一個新的promise,這里必須注意的是你真正需要考慮的是你最后調(diào)用.then()可能代表失敗,那么如果你不捕獲這種失敗,那么容易導(dǎo)致你的錯誤exception消失。

一些人認(rèn)為.then()串聯(lián)鏈條調(diào)用很類似fluent風(fēng)格,但是長長的promise鏈條會讓人迷惑,最后切分為一個個有意義的函數(shù):

function getTasks() { 

 return $http.get('http://example.com/api/v1/tasks')

  .then(function(response) {

   return response.data;

  });

}

function getMyTasks() { 

 return getTasks()

  .then(function(tasks) {

   return filterTasks(tasks, {

    owner: user.username

   });

  });

}

在這個例子中,兩個函數(shù)各自獲得一個promise,攜帶了一個回調(diào)函數(shù)。

有趣的Promise

同樣的promise能夠接受任何數(shù)目的回調(diào),當(dāng)一個Promise被解決實(shí)施后,其中所有回調(diào)函數(shù)都會被調(diào)用,此外,一個promise在被解決實(shí)施后,甚至可以接受一個新的回調(diào),這些回調(diào)完成能以正常方式被調(diào)用,這就允許我們使用回調(diào)實(shí)現(xiàn)簡單形式的緩存:

var tasksPromise; 

function getTasks() { 

 taskPromise = taskPromise || getTasksFromTheServer();

 return taskPromise;

}

這個案例中,getTasks()函數(shù)可以被任意次數(shù)調(diào)用,它總是返回銅牙的promise,其中函數(shù)getTasksFromTheServer()卻只是被調(diào)用一次。

以上這篇NodeJS的Promise的用法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:NodeJS的Promise的用法解析
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報班

  • 報班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久亚洲风情| 国产精品日韩一区二区三区| 国产一区二区视频在线观看| 另类亚洲自拍| 亚欧成人精品| 中文一区在线| 夜夜嗨av一区二区三区四季av| 国内精品一区二区三区| 国产精品美女久久久浪潮软件| 欧美精品导航| 欧美gay视频激情| 久久野战av| 久久久91精品国产一区二区三区| 亚洲欧美精品suv| 亚洲一二三区在线观看| 日韩午夜免费视频| 日韩一区二区福利| 99re热精品| 一区二区三区久久| 欧美中在线观看| 亚洲一区二区视频在线| 久久www免费人成看片高清| 亚洲制服欧美中文字幕中文字幕| 亚洲欧洲日韩在线| 亚洲国产日日夜夜| 一区二区三区国产在线| 香蕉尹人综合在线观看| 久久久久国产精品厨房| 久久久亚洲国产天美传媒修理工| 久久久久99| 久久经典综合| 久久午夜视频| 男女激情久久| 欧美啪啪一区| 欧美日韩天堂| 国产欧美日韩不卡| 极品av少妇一区二区| 欧美性天天影院| 国产伦一区二区三区色一情| 国产一区二区三区黄视频| 黄色av一区| 亚洲裸体视频| 亚洲一二区在线| 久久精品午夜| 欧美屁股在线| 国产日韩欧美91| 亚洲第一色中文字幕| 亚洲精选91| 欧美亚洲在线| 欧美国产亚洲精品久久久8v| 欧美日韩在线播放一区二区| 国产欧美日韩精品丝袜高跟鞋 | 国产精品久久| 国产一区二区三区免费在线观看| 激情六月综合| 中文成人激情娱乐网| 久久久天天操| 欧美丝袜第一区| 亚洲国产mv| 亚洲欧美视频一区| 亚洲精品欧美精品| 欧美成人一品| 一区二区日韩精品| 国产精品国产三级国产普通话三级| 亚洲视频一区| 国产精品v日韩精品| 欧美在线免费观看亚洲| 狠狠色狠狠色综合日日tαg| 久久综合网络一区二区| 久久视频在线看| av成人免费| 久久久久久9| 国产精品久久久久9999| 亚洲国产精品综合| 久久久久久久久一区二区| 国产精品国产三级国产普通话蜜臀 | 亚洲黄色av| 欧美一区二区黄色| 欧美视频在线看| 亚洲人成人99网站| 另类春色校园亚洲| 韩国av一区二区三区四区| 亚洲一区影院| 欧美亚州一区二区三区| 日韩天堂av| 欧美激情第二页| 亚洲欧洲三级| 欧美不卡高清| 在线视频成人| 免费在线观看一区二区| 在线观看不卡| 蜜桃av一区| 悠悠资源网亚洲青| 久久中文字幕一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲自拍偷拍麻豆| 亚洲综合三区| 亚洲狼人综合| 99国产精品久久久久久久| 国产伦精品一区二区三区视频孕妇 | 91久久国产综合久久91精品网站| 国产精品毛片| 亚洲精品一级| 欧美日本精品一区二区三区| 亚洲日本国产| 欧美看片网站| 亚洲欧美国产制服动漫| 国产婷婷一区二区| 久久一区二区三区超碰国产精品 | 国产麻豆精品在线观看| 午夜精品福利在线| 国产一区二区三区在线播放免费观看 | 久久久欧美一区二区| 国内精品久久久久久久果冻传媒| 性色av一区二区三区| 国模精品一区二区三区色天香| 久久国产精品色婷婷| 在线精品国产欧美| 欧美男人的天堂| 亚洲欧美在线另类| 一区在线免费| 欧美日韩在线免费| 欧美亚洲在线播放| 在线精品视频一区二区三四| 欧美激情女人20p| 日韩视频免费在线观看| 国产精品久久久久秋霞鲁丝| 久久精品国产久精国产爱| 亚洲黄色三级| 国产精品亚洲成人| 欧美成人xxx| 亚洲一区二区三区777| 国内外成人在线视频| 美国成人直播| 亚洲欧洲一区二区在线播放 | 欧美日韩一区二区三区在线看 | 久久久精彩视频| 欧美精品久久99| 久久久久久亚洲精品杨幂换脸 | 久久久久se| 亚洲精品一区二区三| 国产精品在线看| 欧美高清不卡在线| 午夜精品福利在线观看| 最新亚洲一区| 国产一区二区三区四区五区美女| 欧美激情综合五月色丁香| 久久九九久精品国产免费直播| 亚洲免费电影在线观看| 黄色av成人| 91久久精品视频| 国产欧美日韩另类视频免费观看| 欧美成人黑人xx视频免费观看| 亚洲欧美一区二区三区久久| 最新高清无码专区| 国产亚洲视频在线| 国产精品美女久久| 欧美视频免费在线观看| 欧美激情一级片一区二区| 久久综合伊人| 久久欧美中文字幕| 欧美综合77777色婷婷| 亚洲视频免费观看| 亚洲精品麻豆| 亚洲国产欧美久久| 亚洲国产精品国自产拍av秋霞| 国内偷自视频区视频综合| 国产日韩欧美精品综合| 国产精品夜夜嗨| 国产美女扒开尿口久久久| 国产精品午夜在线| 国产精品大片| 欧美视频在线一区二区三区| 欧美日韩综合视频| 欧美三级午夜理伦三级中文幕| 欧美国产日本韩| 欧美精品自拍偷拍动漫精品| 欧美国产视频在线观看| 欧美凹凸一区二区三区视频| 另类图片综合电影| 鲁大师影院一区二区三区| 麻豆九一精品爱看视频在线观看免费 | 欧美日本一区二区视频在线观看| 一个人看的www久久| 午夜精品亚洲| 亚洲激情偷拍| 亚洲福利视频专区| 亚洲国产裸拍裸体视频在线观看乱了| 欧美日韩一区二区三区在线看 | 国产伦精品一区二区三区| 欧美亚洲日本国产| 亚洲欧美另类中文字幕| 亚洲欧美激情在线视频| 欧美一区二区三区在线看| 性色av一区二区三区红粉影视| 欧美在线999| 美女露胸一区二区三区| 欧美成人免费在线| 欧美午夜精品理论片a级按摩| 国产精品午夜视频|