日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

“约见”面试官系列之常见面试题第一篇说说promise(建议收藏)

發(fā)布時(shí)間:2023/12/9 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 “约见”面试官系列之常见面试题第一篇说说promise(建议收藏) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1前言

2promise是什么?

2.1舉例說明

3異步操作的常見語法

3.1事件監(jiān)聽

3.2回調(diào)

4異步回調(diào)的問題:

5promise詳解

6最簡(jiǎn)單示例:


1前言

這是來自江蘇某公司的初級(jí)面試題之一

歡迎大家作為補(bǔ)充

為了本題的完善

2promise是什么?

1、主要用于異步計(jì)算
2、可以將異步操作隊(duì)列化,按照期望的順序執(zhí)行,返回符合預(yù)期的結(jié)果
3、可以在對(duì)象之間傳遞和操作promise,幫助我們處理隊(duì)列

2.1舉例說明

  • 同步:假設(shè)你去了一家飯店,找個(gè)位置,叫來服務(wù)員,這個(gè)時(shí)候服務(wù)員對(duì)你說,對(duì)不起我是“同步”服務(wù)員,我要服務(wù)完這張桌子才能招呼你。那桌客人明明已經(jīng)吃上了,你只是想要個(gè)菜單,這么小的動(dòng)作,服務(wù)員卻要你等到別人的一個(gè)大動(dòng)作完成之后,才能再來招呼你,這個(gè)便是同步的問題:也就是“順序交付的工作1234,必須按照1234的順序完成”。

  • 異步:則是將耗時(shí)很長(zhǎng)的A交付的工作交給系統(tǒng)之后,就去繼續(xù)做B交付的工作,。等到系統(tǒng)完成了前面的工作之后,再通過回調(diào)或者事件,繼續(xù)做A剩下的工作。
    AB工作的完成順序,和交付他們的時(shí)間順序無關(guān),所以叫“異步”。

3異步操作的常見語法

3.1事件監(jiān)聽

document.getElementById('#start').addEventListener('click', start, false); function start() {// 響應(yīng)事件,進(jìn)行相應(yīng)的操作 } // jquery on 監(jiān)聽 $('#start').on('click', start)

3.2回調(diào)

// 比較常見的有ajax $.ajax('http://www.wyunfei.com/', {success (res) {// 這里可以監(jiān)聽res返回的數(shù)據(jù)做回調(diào)邏輯的處理} })// 或者在頁(yè)面加載完畢后回調(diào) $(function() {// 頁(yè)面結(jié)構(gòu)加載完成,做回調(diào)邏輯處理 })

有了nodeJS之后...對(duì)異步的依賴進(jìn)一步加劇了

大家都知道在nodeJS出來之前PHP、Java、python等后臺(tái)語言已經(jīng)很成熟了,nodejs要想能夠有自己的一片天,那就得拿出點(diǎn)自己的絕活:
無阻塞高并發(fā),是nodeJS的招牌,要達(dá)到無阻塞高并發(fā)異步是其基本保障
舉例:查詢數(shù)據(jù)從數(shù)據(jù)庫(kù),PHP第一個(gè)任務(wù)查詢數(shù)據(jù),后面有了新任務(wù),那么后面任務(wù)會(huì)被掛起排隊(duì);而nodeJS是第一個(gè)任務(wù)掛起交給數(shù)據(jù)庫(kù)去跑,然后去接待第二個(gè)任務(wù)交給對(duì)應(yīng)的系統(tǒng)組件去處理掛起,接著去接待第三個(gè)任務(wù)...那這樣子的處理必然要依賴于異步操作

4異步回調(diào)的問題:

  • 之前處理異步是通過純粹的回調(diào)函數(shù)的形式進(jìn)行處理
  • 很容易進(jìn)入到回調(diào)地獄中,剝奪了函數(shù)return的能力
  • 問題可以解決,但是難以讀懂,維護(hù)困難
  • 稍有不慎就會(huì)踏入回調(diào)地獄 - 嵌套層次深,不好維護(hù)

一般情況我們一次性調(diào)用API就可以完成請(qǐng)求。
有些情況需要多次調(diào)用服務(wù)器API,就會(huì)形成一個(gè)鏈?zhǔn)秸{(diào)用,比如為了完成一個(gè)功能,我們需要調(diào)用API1、API2、API3,依次按照順序進(jìn)行調(diào)用,這個(gè)時(shí)候就會(huì)出現(xiàn)回調(diào)地獄的問題

5promise詳解

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><script>new Promise(function(resolve, reject) {// 一段耗時(shí)的異步操作resolve('成功') // 數(shù)據(jù)處理完成// reject('失敗') // 數(shù)據(jù)處理出錯(cuò)}).then((res) => {console.log(res)}, // 成功(err) => {console.log(err)} // 失敗)</script> </body></html>

運(yùn)行結(jié)果

  • resolve作用是,將Promise對(duì)象的狀態(tài)從“未完成”變?yōu)椤俺晒Α?#xff08;即從 pending 變?yōu)?resolved),在異步操作成功時(shí)調(diào)用,并將異步操作的結(jié)果,作為參數(shù)傳遞出去;
    reject作用是,將Promise對(duì)象的狀態(tài)從“未完成”變?yōu)椤笆 ?#xff08;即從 pending 變?yōu)?rejected),在異步操作失敗時(shí)調(diào)用,并將異步操作報(bào)出的錯(cuò)誤,作為參數(shù)傳遞出去。
  • promise有三個(gè)狀態(tài):
    1、pending[待定]初始狀態(tài)
    2、fulfilled[實(shí)現(xiàn)]操作成功
    3、rejected[被否決]操作失敗
    當(dāng)promise狀態(tài)發(fā)生改變,就會(huì)觸發(fā)then()里的響應(yīng)函數(shù)處理后續(xù)步驟;
    promise狀態(tài)一經(jīng)改變,不會(huì)再變。
  • Promise對(duì)象的狀態(tài)改變,只有兩種可能:
    從pending變?yōu)閒ulfilled
    從pending變?yōu)閞ejected。
    這兩種情況只要發(fā)生,狀態(tài)就凝固了,不會(huì)再變了。

6最簡(jiǎn)單示例:

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><script>new Promise(resolve => {setTimeout(() => {resolve('hello')}, 2000)}).then(res => {console.log(res)})</script> </body></html>

?運(yùn)行結(jié)果

分兩次,順序執(zhí)行

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><script>new Promise(resolve => {setTimeout(() => {resolve('hello')}, 2000)}).then(val => {console.log(val) // 參數(shù)val = 'hello'return new Promise(resolve => {setTimeout(() => {resolve('world')}, 2000)})}).then(val => {console.log(val) // 參數(shù)val = 'world'})</script> </body></html>

運(yùn)行結(jié)果

promise完成后then()

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><script>let pro = new Promise(resolve => {setTimeout(() => {resolve('hello world')}, 2000)})setTimeout(() => {pro.then(value => {console.log(value) // hello world})}, 2000)</script> </body></html>

結(jié)論:promise作為隊(duì)列最為重要的特性,我們?cè)谌魏我粋€(gè)地方生成了一個(gè)promise隊(duì)列之后,我們可以把他作為一個(gè)變量傳遞到其他地方。


本面試題為前端常考面試題,后續(xù)有機(jī)會(huì)繼續(xù)完善。我是歌謠,一個(gè)沉迷于故事的講述者。

歡迎一起私信交流。

“睡服“面試官系列之各系列目錄匯總(建議學(xué)習(xí)收藏)?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的“约见”面试官系列之常见面试题第一篇说说promise(建议收藏)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。