數(shù)組排序缩宜、 Promise、跨域

數(shù)組排序

給出正整數(shù)數(shù)組 array = [2,1,5,3,8,4,9,5]?

請(qǐng)寫出一個(gè)函數(shù) sort甥温,使得 sort(array) 得到從小到大排好序的數(shù)組 [1,2,3,4,5,5,8,9]新的數(shù)組可以是在 array 自身上改的锻煌,也可以是完全新開辟的內(nèi)存。不得使用 JS 內(nèi)置的 sort API

答:

let sort = (numbers)=>{
? ? for(let i=0;i<numbers.length-1;i++){
? ? ? ? let index = minIndex(numbers.slice(i))+i

? ? ? ? if(index !== i){
? ? ? ? ? ? swap(numbers,index,i)
????????}
????}

? ? return numbers
}

//需要輔助swap 和minIndex

let swap= (array,x,y)=>{
? ? let temp = array[x]????

? ? array[x] = array[y]

? ? array[y] = temp

}

let minIndex = (numbers)=>{
? ? let index =0

? ? for(let i=1;i<numbers.length;i++){
? ? ? ? if(numbers[i]<numbers[index]){
? ? ? ? ? ? index = i
????????}
????}

????return index
}

sort.call(null,[2,1,5,3,8,4,9,5])


你對(duì) Promise 的了解姻蚓?

①Promise 的用途:

答:是為了解決命名不規(guī)范炼幔、回調(diào)地獄使得代碼復(fù)雜、很難進(jìn)行錯(cuò)誤處理等問題(通俗的說 就是Promise?能規(guī)范回調(diào)的名字或順序史简、拒絕回調(diào)地獄、讓代碼可讀性更強(qiáng)、很方便的捕獲錯(cuò)誤 )

②如何創(chuàng)建一個(gè) new Promise(課堂里讓大家背過)

答:

return new Promise((resolve,reject)=>{
? ? //內(nèi)容區(qū)? 任務(wù)成功調(diào)用resolve 失敗調(diào)用reject
})?

③如何使用 Promise.prototype.then(可查 MDN)

答:?

const flag= true

const promise = new Promise((resolve,reject)=>{
? ? if(flag){
? ? ? ? resolve('成功了')
????}else{
? ? ? ? reject('失敗了')
????}
})

promise?

? ? .then(name=>{ //成功返回then
? ? ? ? console.log(`我的then調(diào)用${name}`)?
????})

? ? .catch(name =>{ //失敗返回catch
? ? ? ? console.log(`我的catch調(diào)用${name}`)
????})

? ? .finally(()=>{?
? ? ? ? console.log(`成功失敗都返回`)
????})


圖解


本圖摘自視頻https://www.bilibili.com/video/BV1QV411a7Hu?t=359

④如何使用 Promise.all(可查 MDN)

答: Promise.all可以將多個(gè)Promise實(shí)例包裝成一個(gè)新的Promise實(shí)例圆兵。同時(shí)跺讯,成功和失敗的返回值是不同的,成功的時(shí)候返回的是一個(gè)結(jié)果數(shù)組殉农,失敗時(shí)返回最先被reject失敗狀態(tài)的值

Promise.all的使用:?

let? p1 = new Promise((resolve,reject)=>{
? ? resolve('成功了')
})

let p2 = new Promise((resolve,reject)=>{
? ? resolve('成功了2222222')
})

let p3 = new Promise((resolve,reject)=>{
? ? reject('失敗')
})

Promise.all([p1,p2]).then(result=>{

? ? console.log(result)

}).catch(error=>{

? ? console.log(error)

})

Promise.all([p1,p3,p2]).then((result)=>{
? ? console.log(result)
}).catch((error)=>{
? ? console.log(error) //Promise.all 在任意一個(gè)傳入的promise失敗時(shí)返回失敗刀脏,即有一個(gè)立即調(diào)用失敗函數(shù),那么Promise.all將立即變?yōu)槭?br>})

Promise.all?的異步和同步 :

Promise.all在處理多個(gè)異步和同步處理時(shí)非常有用超凳,比如說一個(gè)頁面上需要等兩個(gè)或者多個(gè)ajax的數(shù)據(jù)回來以后才正常顯示愈污,在此之前只顯示loading圖標(biāo)

let wake = time =>{
? ? return new Promise((resolve,reject)=>{
? ? ? ? setTimeout(()=>{
? ? ? ? ? ? resolve(`${time/1000}秒后醒來`)
????????},time)
????})
}

let p1 = wake(5000)

let p2 = wake(3000)

Promise.all([p1,p2]).then((result)=>{
? ? console.log(result)
}).catch((error)=>{
? ? console.log(error)
})

需要注意的是,Promise.all 獲得的成功結(jié)果的數(shù)組里面的數(shù)據(jù)順序和Promise.all接收到的數(shù)組順序是一致的轮傍,即p1的結(jié)果在前暂雹,即便p1的結(jié)果獲取的比p2要晚,這帶來了一個(gè)絕大的好處:在前端開發(fā)請(qǐng)求數(shù)據(jù)的過程中 偶爾會(huì)遇到發(fā)送多個(gè)請(qǐng)求并根據(jù)請(qǐng)求順序獲取和使用數(shù)據(jù)的場景创夜,使用Promise.all毫無疑問可以解決這個(gè)問題杭跪。


⑤如何使用 Promise.race(可查 MDN)

答:race 誰跑得快執(zhí)行誰

let p1 = new Promise(function(resolve,reject){?

setTimeout(resolve,500,"one") })?

let p2=new Promise(function(resolve,reject){?

setTimeout(resolve,100,'two') })?

Promise.race([p1,p2]).then(function(value){ console.log(value) })

跨域

①什么是同源

答:如果兩個(gè)url的協(xié)議、域名驰吓、端口號(hào)完全一致涧尿,那么這兩個(gè)url就是同源的

? ? ? ?比如:https://baidu.com、https://www.baidu.com不同源 //完全一致才算同源


②什么是跨域

當(dāng)一個(gè)請(qǐng)求的協(xié)議檬贰、域名姑廉、子域名、端口之間任意一個(gè)與當(dāng)前頁面url不同即為跨域

③JSONP 跨域

最主要思路讓js包含數(shù)據(jù)

④CORS 跨域

Access-Control-Allow-Origin : http://lulu.com:8880

詳情案例鏈接


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翁涤,一起剝皮案震驚了整個(gè)濱河市桥言,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌迷雪,老刑警劉巖限书,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異章咧,居然都是意外死亡倦西,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門赁严,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扰柠,“玉大人,你說我怎么就攤上這事疼约÷钡担” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵程剥,是天一觀的道長劝枣。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么舔腾? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任溪胶,我火速辦了婚禮,結(jié)果婚禮上稳诚,老公的妹妹穿的比我還像新娘哗脖。我一直安慰自己,他們只是感情好扳还,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布才避。 她就那樣靜靜地躺著,像睡著了一般氨距。 火紅的嫁衣襯著肌膚如雪桑逝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天衔蹲,我揣著相機(jī)與錄音肢娘,去河邊找鬼。 笑死舆驶,一個(gè)胖子當(dāng)著我的面吹牛橱健,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沙廉,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼拘荡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撬陵?” 一聲冷哼從身側(cè)響起珊皿,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巨税,沒想到半個(gè)月后蟋定,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡草添,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年驶兜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片远寸。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抄淑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驰后,到底是詐尸還是另有隱情肆资,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布灶芝,位于F島的核電站郑原,受9級(jí)特大地震影響唉韭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜犯犁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一纽哥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栖秕,春花似錦、人聲如沸晓避。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俏拱。三九已至暑塑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锅必,已是汗流浹背事格。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搞隐,地道東北人驹愚。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像劣纲,于是被迫代替她去往敵國和親逢捺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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