摘要:首先是一個構(gòu)造器函數(shù),使用它必須通過一個實(shí)例出來,并且出來的實(shí)例暈有一個內(nèi)置的參數(shù),這個參數(shù)是一個函數(shù),這個參數(shù)擁有自己內(nèi)置的兩個參數(shù),和,并且這兩個參數(shù)也是兩個函數(shù)異步操作成功上面這個就是一個最簡單的對象屬于的一個方法,里面的兩個參數(shù)屬于
首先promise是一個構(gòu)造器函數(shù),使用它必須通過new一個實(shí)例出來,并且new出來的實(shí)例暈有一個內(nèi)置的參數(shù),這個參數(shù)是一個函數(shù),這個參數(shù)擁有自己內(nèi)置的兩個參數(shù),resolve和reject,并且這兩個參數(shù)也是兩個函數(shù)
var promise = new Promise(function(resolve, reject) { // ... some code if (/* 異步操作成功 */){ resolve(value); } else { reject(error); }.then(function(){}, function(){})
*上面這個就是一個最簡單的promise對象
var a=new Promise(function(resolve,reject){ console.log("A"); resolve(); console.log("B") }).then(function(){ console.log("C") }) //A //B //C var b=new Promise(function(resolve,reject){ var success="success"; var err="err"; reject(err) }).then(function(e){ console.log(e) },function(e){ console.log(e) })//err
then屬于promise的一個方法,then里面的兩個參數(shù)屬于promise的狀態(tài)達(dá)成后所調(diào)用的回調(diào)函數(shù),當(dāng)promise狀態(tài)為成功時候,調(diào)用第一個函數(shù),失敗則調(diào)用第二個函數(shù),同時我們可以看出,promise實(shí)例在創(chuàng)建后的那一刻,它的實(shí)參函數(shù)就開始執(zhí)行,當(dāng)resolve函數(shù)執(zhí)行后,promise對象的狀態(tài)由進(jìn)行變?yōu)榱藞?zhí)行成功,同樣,reject函數(shù)的執(zhí)行將promise狀態(tài)由進(jìn)行變?yōu)槭?/strong>
另外resolve和reject也起到傳遞信息的作用,信息通過他們的參數(shù)來傳遞,then方法則可以來接收傳遞的信息
關(guān)于Promise的一些屬性方法可以Promise.prototype獲取,注意:Promise首字母一定要大寫
當(dāng)然then方法可以采用鏈?zhǔn)椒磻?yīng),即當(dāng)then方法的參數(shù)(回調(diào)函數(shù))執(zhí)行后又返回一個promise實(shí)例,則后面的then會繼續(xù)等待該實(shí)例最終的狀態(tài)而采取回調(diào)
var b = new Promise(function (resolve, reject) { var a = function () { return new Promise(function (resolve, reject) { var c = 1; resolve(c) }) }; reject(a) }).then(function (e) { console.log(e) }, function (e) { var d = e(); return d }).then(function (e) { console.log(e) }, function (e) { console.log(e) })//1
Promise的catch方法是當(dāng)上面的程序發(fā)生錯誤的時候指定所要執(zhí)行的回調(diào)函數(shù),該回調(diào)函數(shù)有一個參數(shù)err,用來儲存捕獲到的錯誤
var a=function(){ return new Promise(function(resolve,reject){ resolve(x+3)//x沒有聲明 }).catch(function(err){ console.log(err) }).then(function(){console.log("success")}, function(){ console.log("err") }) }; a()//輸出 x is not defined var a=function(){ return new Promise(function(resolve,reject){ resolve(x+3) }).then(function(){console.log("success")}, function(){ console.log("err") }) }; a()//輸出err var a=function(){ return new Promise(function(resolve,reject){ reject(x+3) }).then(function(){console.log("success")}, function(){ console.log("err") }) }; a()//輸出err
第一個例子里面當(dāng)reslove被調(diào)用的時候發(fā)生錯誤,catch捕捉錯誤并執(zhí)行回調(diào)函數(shù),catch后面的then方法則成為對于catch做出的結(jié)果進(jìn)行回調(diào),由于捕獲錯誤成功,則調(diào)用then的第一個回調(diào)函數(shù)
從2號例子中我們對比可以看出在promise狀態(tài)又進(jìn)行到成功需要resolve函數(shù)執(zhí)行成功才能判定promise狀態(tài)成功,resolve函數(shù)沒有執(zhí)行成功,則promise狀態(tài)立刻變?yōu)閞eject失敗,并調(diào)用then后第二個函數(shù)
從3號例子可以看出,promise中的狀態(tài)執(zhí)行失敗都會調(diào)用reject
var a=function(){ return new Promise(function(resolve,reject){ console.log(1) }).then(function(){console.log("success")}, function(){ console.log("err") }) }; a() //1
我們從上面例子可以看出沒有給promise指定狀態(tài)時候,then方法是不會被激活
var a=function(){ return new Promise(function(resolve,reject){ resolve();reject(); }).then(function(){console.log("success")}, function(){ console.log("err") }) }; a()//success
上面例子我們可以看出一旦有一個狀態(tài)被指定就不能在改變。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/88498.html
摘要:首先是一個構(gòu)造器函數(shù),使用它必須通過一個實(shí)例出來,并且出來的實(shí)例暈有一個內(nèi)置的參數(shù),這個參數(shù)是一個函數(shù),這個參數(shù)擁有自己內(nèi)置的兩個參數(shù),和,并且這兩個參數(shù)也是兩個函數(shù)異步操作成功上面這個就是一個最簡單的對象屬于的一個方法,里面的兩個參數(shù)屬于 首先promise是一個構(gòu)造器函數(shù),使用它必須通過new一個實(shí)例出來,并且new出來的實(shí)例暈有一個內(nèi)置的參數(shù),這個參數(shù)是一個函數(shù),這個參數(shù)擁有自己...
摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號分隔列表等等。排序算法看源碼,把它背下來吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...
摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號分隔列表等等。排序算法看源碼,把它背下來吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...
摘要:選擇的主要原因大概是因?yàn)樵摽蚣艹霈F(xiàn)較早,感覺上會相對成熟,日后學(xué)習(xí)中遇到問題想要查找答案相對簡單一些,對,就是這么簡單。多說無益,接下來開始的學(xué)習(xí),我按照我學(xué)習(xí)中帶著的問題來一一解答,完成我的入門筆記。主要是針對前端的組件化開發(fā)。 這兩天得空,特意來折騰了以下時下火熱的前端框架react,至于為什么選react,作為一個初學(xué)者react和vue在技術(shù)上的優(yōu)劣我無權(quán)評論,也就不妄加評論了...
閱讀 2260·2023-04-25 14:50
閱讀 1234·2021-10-13 09:50
閱讀 1866·2019-08-30 15:56
閱讀 1839·2019-08-29 15:29
閱讀 2886·2019-08-29 15:27
閱讀 3548·2019-08-29 15:14
閱讀 1192·2019-08-29 13:01
閱讀 3299·2019-08-26 14:06