国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Promise理解

jifei / 3310人閱讀

摘要:參數(shù)數(shù)組中的任何一個對象如果變?yōu)榛蛘叩脑挘摵瘮?shù)就會返回,并使用這個對象的值進(jìn)行或者。并沒有執(zhí)行進(jìn)入后,依舊會執(zhí)行并不會被住。發(fā)生,不會執(zhí)行,會直接到中,由于在和后面沒有處理了,因此在這兩個中如果出現(xiàn)異常的話將不會被捕獲只會出現(xiàn)以下

ES6 Generator/Promise Generator
node -harmony app.js (harmony 告訴Node使用ES6來運行)
yield(不能再普通函數(shù)中,只能在function* 這樣的Generator函數(shù)中,擁有next方法)

next 方法的參數(shù)表示上一個 yield 語句的返回值,所以第一次使用 next 方法時,不能帶有參數(shù)。V8 引擎直接忽略第一次使用 next 方法時的參數(shù),只有從第二次使用 next 方法開始,參數(shù)才是有效的。

function* ticketGenerator() {
   yield 1;
    yield 2;
    yield 3;
    //yield,return有些像,都能返回緊跟語句后面的表達(dá)式的值,
    //區(qū)別是每次遇到y(tǒng)ield,函數(shù)是暫停執(zhí)行,下一次再從該位置繼續(xù)向后執(zhí)行
    //而return不具備位置記憶功能,只能執(zhí)行一次,所以一個函數(shù)只能返回一個值
    return 4; //yield 4; {value: 4, done: false}
}

const takeANumber = ticketGenerator();

var i = 0;
while (i < 4) {
    i++;
    console.log(takeANumber.next())
}
// { value: 1, done: false }
// { value: 2, done: false }
// { value: 3, done: false }
// { value: 4, done: true }

//for ... of依次顯示yield的值,一旦next方法返回的對象的done為
//true, 循環(huán)就會終止
for (var v of ticketGenerator()) {
    console.log(v);
}

進(jìn)階:

function* foo(x) {
  var y = 2 * (yield (x + 1));
  var z = yield (y / 3);
  return (x + y + z);
}

var it = foo(5);

it.next()
// { value:6, done:false }
it.next(12)
// { value:8, done:false }
it.next(13)
// { value:42, done:true }

如果 yield 命令后面跟的是一個遍歷器,需要在 yield 命令后面加上星號,表明它返回的是一個遍歷器。這被稱為 yield語句。*

Promise(解決異步操作的對象)

pending - The initial state of a promise.

fulfilled - The state of a promise representing a successful operation.

rejected - The state of a promise representing a failed operation.

Promise庫

bluebird

Q

then.js

es6-promise

ypromise

async

native-promise-only

API:
new Promise((resolve, reject) => {})
Static Methods:
Promise.resolve(value) --返回一個使用接收到的值進(jìn)行了resolve的新的promise對象
Promise.reject(value) --返回一個使用接收到的值進(jìn)行了reject的新的promise對象
Promise.all(array)
生成并返回一個新的promise對象。
當(dāng)這個數(shù)組里的所有promise對象全部變?yōu)閞esolve或reject狀態(tài)的時候,它才會去調(diào)用 .then 方法。

eg: 
Promise.all([Promise.resolve("a"), "b", Promise.resolve("c")])
.then(function (res) {
  assert(res[0] === "a")
  assert(res[1] === "b")
  assert(res[2] === "c")
})

Promise.race(array)
生成并返回一個新的promise對象。
參數(shù) promise 數(shù)組中的任何一個promise對象如果變?yōu)閞esolve或者reject的話, 該函數(shù)就會返回,并使用這個promise對象的值進(jìn)行resolve或者reject。
eg:
var p1 = Promise.resolve(1),
    p2 = Promise.resolve(2),
    p3 = Promise.resolve(3);
Promise.race([p1, p2, p3]).then(function (value) {
    console.log(value);  // 1
});
Prototype Methods:
Promise.then(onFulfilled, onRejected)
Promise.catch(onRejected)

Example:

function taskA() {
    console.log("Task A");
    throw new Error("throw Error Task A")
}
function taskB() {
    console.log("Task B");
}
function onRejected(error) {
    console.log("Catch Error: ", error);
}
function finalTask() {
    console.log("Final Task");
    throw new Error("throw Error Final task")
}

var promiseB = new Promise((resolve, reject) => reject(new Error("error msg")))
promiseB
.then(success => console.log("onfulfilled ", success), err => console.log("onRejected ", err))
.then(taskA)
.then(taskB)
.catch(onRejected)
.then(finalTask);

//output: 
//onRejected Error: error msg
//Task A 
//Catch Error: Error: throw Error Task A ---并沒有執(zhí)行task B
//Final Task

promiseB 進(jìn)入onRejected callback后,依舊會執(zhí)行Task A, 并不會被 onRejected catch住。
taskA 發(fā)生error,不會執(zhí)行taskB,會直接到 onRejected -> finalTask

promise chain中,由于在 onRejected 和 finalTask 后面沒有 catch 處理了,因此在這兩個Task中如果出現(xiàn)異常的話將不會被捕獲,只會出現(xiàn)以下warning:

(node:83039) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: throw Error Final task

(node:83039) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/89567.html

相關(guān)文章

  • JavaScript 異步

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。寫一個符合規(guī)范并可配合使用的寫一個符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問題描述 在開發(fā)過程中,遇到一個需求:在系統(tǒng)初始化時通過http獲取一個第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個接口,可通過...

    tuniutech 評論0 收藏0
  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評論0 收藏0
  • 理解 Javascript 中的 Promise

    摘要:理解承諾有兩個部分。如果異步操作成功,則通過的創(chuàng)建者調(diào)用函數(shù)返回預(yù)期結(jié)果,同樣,如果出現(xiàn)意外錯誤,則通過調(diào)用函數(shù)傳遞錯誤具體信息。這將與理解對象密切相關(guān)。這個函數(shù)將創(chuàng)建一個,該將在到秒之間的隨機(jī)數(shù)秒后執(zhí)行或。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! showImg(https://segmentfault.com/img/bVbkNvF?w=1280&h=...

    paulli3 評論0 收藏0
  • 理解 Javascript 中的 Promise

    摘要:理解承諾有兩個部分。如果異步操作成功,則通過的創(chuàng)建者調(diào)用函數(shù)返回預(yù)期結(jié)果,同樣,如果出現(xiàn)意外錯誤,則通過調(diào)用函數(shù)傳遞錯誤具體信息。這將與理解對象密切相關(guān)。這個函數(shù)將創(chuàng)建一個,該將在到秒之間的隨機(jī)數(shù)秒后執(zhí)行或。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! showImg(https://segmentfault.com/img/bVbkNvF?w=1280&h=...

    chaos_G 評論0 收藏0
  • Promise理解與實現(xiàn)

    摘要:對象設(shè)置初始狀態(tài)默認(rèn)為等待狀態(tài)用數(shù)組來保存成功函數(shù)設(shè)置為成功狀態(tài)設(shè)置為失敗狀態(tài)調(diào)用回調(diào)函數(shù)增加方法根據(jù)狀態(tài)執(zhí)行成功失敗方法執(zhí)行成功方法執(zhí)行失敗方法將成功失敗方法保存在數(shù)組里 promise理解 promise的意思是承諾。承諾理解為某個時候一些條件滿足后,會兌現(xiàn)一件事情。 //為了方便理解我編一個小故事 //先假裝我有一個女朋友 //她承諾如果她爸媽不回來就給我就可以去幫她修電腦 否則...

    hlcc 評論0 收藏0
  • Promise理解

    摘要:中就是一個構(gòu)造函數(shù)函數(shù)也是對象為什么需要多個嵌套的異步操作,如果直接用方式,會導(dǎo)致的出現(xiàn)使得異步操作更加規(guī)范,更加統(tǒng)一。的方法構(gòu)造函數(shù)構(gòu)造函數(shù)用于生成對象,函數(shù)在構(gòu)造函數(shù)執(zhí)行時同步執(zhí)行。 什么是Promise? 含以上:抽象異步操作的工具。javascript中:Promise就是一個構(gòu)造函數(shù)(函數(shù)也是對象) 為什么需要Promise? 1.多個嵌套的異步操作,如果直接用callbac...

    Binguner 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<