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

資訊專欄INFORMATION COLUMN

ES6的基礎(chǔ)知識(三)

lieeps / 638人閱讀

摘要:會觸發(fā)方法第一個回調(diào)會觸發(fā)方法第二個回調(diào)或方法成功操作失敗操作會終止的執(zhí)行需要方法觸發(fā)向下執(zhí)行執(zhí)行結(jié)果實現(xiàn)的參數(shù)是一個函數(shù)有和兩個參數(shù)回調(diào)函數(shù)中會指向需要保存才會指向?qū)嵗龑ο笕N狀態(tài)分別為狀態(tài)只能從變成或者成功回調(diào)方法集合失敗回調(diào)方法集合觸

promise
// resolve()會觸發(fā)then方法第一個回調(diào), reject()會觸發(fā)then方法第二個回調(diào)或catch方法
let p = new Promise((resolve, reject) => {
  setTimeout(() => {
    if (Math.random() > 0.5) {
      resolve("成功操作");
    } else {
      reject("失敗操作");
    }
  });
});

p.then(
  res => {
    console.log(res);
  },
  err => {
    console.log(err);
  }
);
generator
// yield會終止fn()的執(zhí)行,需要next()方法觸發(fā)fn()向下執(zhí)行
function* fn(x) {
  yield x[0];
  yield x[1];
  yield x[2];
}

let res;
let t = fn([1, 2, 3]);
do {
  res = t.next();
  console.log(res);
} while (!res.done);

// 執(zhí)行結(jié)果
// { value: 1, done: false }
// { value: 2, done: false }
// { value: 3, done: false }
// { value: undefined, done: true }
實現(xiàn)promise
// Promise的參數(shù)是一個函數(shù)async,async()有resolve和reject兩個參數(shù)
function Promise(async) {
  // 回調(diào)函數(shù)中this會指向window,需要保存才會指向Promise實例對象
  let _this = this;
  // Promise三種狀態(tài),分別為pending,resolved,rejected.狀態(tài)只能從pending變成resolved或者rejected
  _this.status = "pending";
  _this.val = undefined;
  // 成功回調(diào)方法集合
  _this.onResolvedCallbacks = [];
  // 失敗回調(diào)方法集合
  _this.onRejectedCallbacks = [];
  // 觸發(fā)resolve()方法異步狀態(tài)改變成成功, 將會執(zhí)行成功回調(diào)集合中的方法
  function resolve(val) {
    if (_this.status === "pending") {
      _this.status = "resolved";
      _this.val = val;
      _this.onResolvedCallbacks.forEach(item => item(val));
    }
  }
  // 觸發(fā)reject()方法異步狀態(tài)改變成失敗, 將會執(zhí)行失敗回調(diào)集合中的方法
  function reject(val) {
    if (_this.status === "pending") {
      _this.status = "rejected";
      _this.val = val;
      _this.onRejectedCallbacks.forEach(item => item(val));
    }
  }
  // 異常捕獲
  try {
    async(resolve, reject);
  } catch (err) {
    reject(err);
  }
}
// then方法有兩個參數(shù), 第一個異步成功后執(zhí)行的函數(shù), 第二個是異步出異常后執(zhí)行的函數(shù)
Promise.prototype.then = function(resolved, rejected) {
  let _this = this;
  if (_this.status === "pending") {
    // 將所有then要執(zhí)行的方法push到回調(diào)函數(shù)集合中,在狀態(tài)改為resolved執(zhí)行其中的方法
    _this.onResolvedCallbacks.push(resolved);
    // 將所有then要執(zhí)行的方法push到回調(diào)函數(shù)集合中,在狀態(tài)改為rejected執(zhí)行其中的方法
    _this.onRejectedCallbacks.push(rejected);
  }
  if (_this.status === "resolved") {
    resolved(_this.val);
  }
  if (_this.status === "rejected") {
    rejected(_this.val);
  }
};
實現(xiàn)generator
// 生成器
function fn(val) {
  let i = 0;
  return {
    next() {
      let done = i === val.length;
      let value = val[i++];
      return {
        value,
        done
      };
    }
  };
}

// 迭代器
let it = fn([1, 2, 3]);
let result;
do {
  result = it.next();
  console.log(result);
} while (!result.done);

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

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

相關(guān)文章

  • ES6基礎(chǔ)教學(xué)_解析彩票項目-學(xué)習(xí)筆記(一)

    摘要:彩票項目實戰(zhàn)學(xué)習(xí)記錄一完整走了一遍課程,覺得還不錯。支持正版人人有責(zé)零基礎(chǔ)教學(xué)解析彩票項目下面是項目課程的目錄路線一個項目分為三部分業(yè)務(wù)邏輯,自動構(gòu)建系統(tǒng),模擬數(shù)據(jù)和真實數(shù)據(jù)接口處理。 彩票項目實戰(zhàn)學(xué)習(xí)記錄(一) 完整走了一遍課程,覺得還不錯。 總結(jié): es6的知識點說得還算清楚,主要是為了了解和使用,不是深究,所以淺嘗即止即可,所以覺得還不錯。 完整還原了項目開發(fā)的代碼設(shè)計和開發(fā)過...

    blastz 評論0 收藏0
  • ES6部分方法點評():babel-preset-es2015-loose可轉(zhuǎn)換且移動端兼容性較好

    摘要:是目前最常用的轉(zhuǎn)的工具,但即使是,各瀏覽器的支持度也是不一的,因此便產(chǎn)生了本文,找出一些能夠被翻譯成兼容性高代碼的語法。不可用因為會使用到參考資料,用來查瀏覽器兼容性。到底將代碼轉(zhuǎn)換成什么鳥樣,感謝。官網(wǎng)試驗轉(zhuǎn)換后的代碼 前言 由于目前各瀏覽器對ES6兼容性較低,再加上需要兼容歷史上各種版本的瀏覽器,因此,使用編譯器將ES6語法轉(zhuǎn)譯成ES5語法則勢在必行了。babel是目前最常用的ES...

    wean 評論0 收藏0
  • es6常用知識) prosime和generator

    摘要:異步執(zhí)行可以用回調(diào)函數(shù)實現(xiàn)。全成功也可以通過解構(gòu)數(shù)組的方式,將展開賦值??梢砸来文玫矫總€結(jié)果。放棄暫時放棄執(zhí)行相當(dāng)于創(chuàng)建了一個對象。代表是否完成,代表函數(shù)完成,已經(jīng)到終點。是因為最終的結(jié)果需要在最后的時候返回最終結(jié)果 prosime 在JavaScript的世界中,所有代碼都是單線程執(zhí)行的。由于這個缺陷,導(dǎo)致JavaScript的所有網(wǎng)絡(luò)操作,瀏覽器事件,都必須是異步執(zhí)行。異步執(zhí)行可以...

    flybywind 評論0 收藏0
  • 從0到1使用VUE-CLI3開發(fā)實戰(zhàn)(): ES6/ES7知識儲備

    摘要:它們都用于聲明變量。盲目使用替換后可能會導(dǎo)致預(yù)期意外的結(jié)果。有鑒于此,還是建議使用字符串,布爾和數(shù)字類型的數(shù)據(jù)類型。像使用這種下劃線命名約定在一個開源項目中,命名規(guī)則很難維持得一直很好,這樣經(jīng)常會造成一些困擾。 今天群里有小伙伴跟我聊天,問了我?guī)讉€關(guān)于ES6的問題,我才意識到,大部分初學(xué)者在學(xué)習(xí)的過程中,都是學(xué)了HTML/CSS/JS之后就開始上手學(xué)習(xí)框架了,而對于ES6的重視程度卻不...

    crossoverJie 評論0 收藏0

發(fā)表評論

0條評論

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