成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Promise

brianway / 1976人閱讀

摘要:的狀態(tài)對(duì)象有三種狀態(tài)初始狀態(tài),既不是也不是成功。創(chuàng)建的基本語法使用來調(diào)用的構(gòu)造器進(jìn)行實(shí)例化注意時(shí),會(huì)立即執(zhí)行。等同于以下形式報(bào)錯(cuò)注意要想調(diào)用之后返回的對(duì)象的不是,必須一個(gè)值和返回對(duì)象的狀態(tài)是,而不是

1 Promise的狀態(tài)
1.1 Promise對(duì)象有三種狀態(tài):
pending 初始狀態(tài),既不是resolved也不是rejected;
resolved 成功。此時(shí)調(diào)用onFulfilled;
rejected 失敗。此時(shí)調(diào)用onRejected;
resolved和rejected都可以表示為settled.最初Promise為pending狀態(tài),在執(zhí)行后轉(zhuǎn)為settled狀態(tài),而settled狀態(tài)分為兩種:在成功后轉(zhuǎn)為resolved,執(zhí)行.then(onFulfilled)方法;在失敗后轉(zhuǎn)為reject,執(zhí)行.then(onRejected)或.catch(onRejected),進(jìn)行異步操作,再返回Promise對(duì)象。

2 創(chuàng)建Promise的基本語法:
2.1 使用new來調(diào)用Promise的構(gòu)造器進(jìn)行實(shí)例化

var promise = new Promise(function(resolve, reject) {
  if(...) {
   resolve(data);
  } else {
   reject(new Error("error"));
  }
});
注意:new Promise(func)時(shí),func會(huì)立即執(zhí)行。

e.g.1
new Promise(function(resolve, reject) {
  console.log("#1");
  resolve(1);//執(zhí)行完這行,內(nèi)部屬性[[PromiseStatus]]和[[PromiseValue]]都變了,分別由pending -> resolved, undefined -> 1
  console.log("#2");
}).then(function() {
  console.log("#3");
}); // #1 #2 #3 先執(zhí)行主線程執(zhí)行棧中的代碼

e.g.2
new Promise(function(resolve, reject) {
  console.log("#1");
  reject(4);//執(zhí)行完這行,內(nèi)部屬性[[PromiseStatus]]和[[PromiseValue]]都變了,分別由pending -> rejected, undefined -> 4
  console.log("#2");
}); // #1 #2 報(bào)錯(cuò):Uncaught (in promise) Error: reject(…) 因?yàn)楹竺鏇]有then/catch提供的onRejected回調(diào),異常沒有被消費(fèi)掉

P.S. reject的參數(shù)可以是任意類型的,但一般都傳入 Error對(duì)象表示錯(cuò)誤原因

2.2 Promise.resolve & Promise.reject
Promise.resolve & Promise.reject可以認(rèn)為是new Promise()的快捷方式,返回值也是一個(gè)promise對(duì)象,所以可以進(jìn)行鏈?zhǔn)秸{(diào)用。

Promise.resolve(4); // Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: 4}
等同于以下代碼
new Promise(function(resolve) {
  resolve(4);
});
 
Promise.reject(4); // Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: 4}
//等同于以下代碼
new Promise(function(resolve, reject) {
  reject(4);
})

3 Promise.prototype.then(function onFulfilled() {...}, function onRejected() {...})
當(dāng)resolve(成功)時(shí),會(huì)調(diào)用onFulfilled函數(shù);reject(失敗)時(shí),會(huì)調(diào)用onRejected函數(shù)。若只想處理異常情況的函數(shù),可promise.then(undefined, onRejected),當(dāng)然更好的選擇是用promise.catch()來處理。二者效果相同。

promise.then(function (value) {
  console.log(value); 
}).catch(function (error) {
  console.log(error);
});
//等同于以下形式
promise.then(function (value) {
  console.log(value);
}, function (error) {
  console.log(error);
});
 
e.g.3
new Promise(function(resolve, reject) {
  resolve(2);
}); // Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: 2}

e.g.4
new Promise(function(resolve, reject) {
  resolve(2);
}).then(function() {
  console.log("ha");
}); // ha Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: undefined}

e.g.5
new Promise(function(resolve, reject) {
  resolve(2);
}).then(function() {
  return "haha";
}); // Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: "haha"}

e.g.6
new Promise(function(resolve, reject) {
  reject(2);
}); // Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: 2} 報(bào)錯(cuò):Uncaught (in promise) 2

e.g.7
new Promise(function(resolve, reject) {
  reject(2);
}).then(function() {
}, function() {
  console.log("ha");
}); // ha Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: undefined}

e.g.8
new Promise(function(resolve, reject) {
  reject(2);
}).then(function() {
}, function() {
  return "haha";
}); // Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: "haha"}

注意:要想調(diào)用then之后返回的promise對(duì)象的[[PromiseValue]]不是undefined,必須return一個(gè)值;
e.g.7和e.g.8返回對(duì)象的狀態(tài)是 resolved,而不是 rejected.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94537.html

相關(guān)文章

  • Promise的幾個(gè)擴(kuò)展API總結(jié)

    摘要:的幾個(gè)擴(kuò)展總結(jié)描述和相反,當(dāng)所有的被拒絕之后,方法執(zhí)行完成的決議,如果存在一個(gè)執(zhí)行完成的決議,方法則執(zhí)行拒絕里邊的所有實(shí)例反過來就好了執(zhí)行到此執(zhí)行到此描述忽略被拒絕的,只需要有一個(gè)完成的,方法就執(zhí)行完成操作,如果全部的都被拒絕,方法執(zhí)行拒絕 Promise的幾個(gè)擴(kuò)展API總結(jié) 1. Promise.none 描述: 和 Promise.all 相反,當(dāng)所有的promise被拒絕之后,n...

    李義 評(píng)論0 收藏0
  • 異步發(fā)展流程 —— 手寫一個(gè)符合 Promise/A+ 規(guī)范的 Promise

    摘要:構(gòu)造函數(shù)的實(shí)現(xiàn)我們?cè)谑褂玫臅r(shí)候其實(shí)是使用關(guān)鍵字創(chuàng)建了一個(gè)的實(shí)例,其實(shí)是一個(gè)類,即構(gòu)造函數(shù),下面來實(shí)現(xiàn)構(gòu)造函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000018998456); 閱讀原文 概述 Promise 是 js 異步編程的一種解決方案,避免了 回調(diào)地獄 給編程帶來的麻煩,在 ES6 中成為了標(biāo)準(zhǔn),這篇文章重點(diǎn)不是敘...

    UnixAgain 評(píng)論0 收藏0
  • Promise 對(duì)象的理解

    摘要:使用對(duì)象的好處在于可以將異步操作以同步操作的流程表達(dá)出來,避免了層層嵌套的回調(diào)函數(shù)。對(duì)象異步操作拋出錯(cuò)誤,狀態(tài)就會(huì)變?yōu)?,就?huì)調(diào)用方法指定的回調(diào)函數(shù)處理這個(gè)錯(cuò)誤。 Promise 含義 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。它由社區(qū)最早提出和實(shí)現(xiàn),ES6 將其寫進(jìn)了語言標(biāo)準(zhǔn),統(tǒng)一了用法,原生提供了 Promise 對(duì)象。 所謂 P...

    church 評(píng)論0 收藏0
  • Promise 中的三兄弟 .all(), .race(), .allSettled()

    摘要:對(duì)于的來說基元函數(shù)包括組合函數(shù)的類型簽名返回情況完成如果傳入的可迭代對(duì)象為空,會(huì)同步地返回一個(gè)已完成狀態(tài)的。相反,如果是在指定的時(shí)間之后完成,剛返回結(jié)果就是一個(gè)拒絕狀態(tài)的從而觸發(fā)方法指定的回調(diào)函數(shù)。在行中,對(duì)每個(gè)小任務(wù)得到的結(jié)果進(jìn)行匯總。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 從ES6 開始,我們大都使用的是 P...

    vspiders 評(píng)論0 收藏0
  • 實(shí)現(xiàn)Promise

    摘要:使用是極好的,它是如此有用以至于我覺得應(yīng)該好好研究一下,甚至是實(shí)現(xiàn)一個(gè)簡(jiǎn)易的版本。構(gòu)造函數(shù)檢查參數(shù)例如是不是函數(shù)啊初始化,創(chuàng)建對(duì)象執(zhí)行因此構(gòu)造函數(shù)里面?zhèn)魅氲氖橇⒓幢粓?zhí)行的。 使用Promise是極好的,它是如此有用以至于我覺得應(yīng)該好好研究一下Promise,甚至是實(shí)現(xiàn)一個(gè)簡(jiǎn)易的版本。實(shí)現(xiàn)之前,我們先來看看Promise的用途: 使用Promise callback hell Promi...

    xcc3641 評(píng)論0 收藏0
  • 【筆記】你不知道的JS讀書筆記——Promise

    摘要:寫在前面這一章的順序?qū)τ谖唇佑|過使用過的童鞋而言略抽象了,前邊幾章主要為了說明和之前的異步方式相比有什么優(yōu)勢(shì)和它能解決什么問題,后邊才詳解的設(shè)計(jì)和各種場(chǎng)景下如何使用。建議先了解和簡(jiǎn)單使用過后再閱讀,效果更佳。 寫在前面:Promise這一章的順序?qū)τ谖唇佑|過使用過Promise的童鞋而言略抽象了,前邊幾章主要為了說明Promise和之前的異步方式相比有什么優(yōu)勢(shì)和它能解決什么問題,后邊才...

    mumumu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<