小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Promise學習筆記

 印度阿三17 2019-07-16

總是會看到Promise,一直不知道具體是干嘛用的,學習一下~~~

1、異步async&同步sync

首先需要了解一下同步和異步。

同步模式,一次只能執(zhí)行一個任務,函數(shù)調(diào)用后需等到函數(shù)執(zhí)行結束,返回執(zhí)行的結果,才能進行下一個任務。如果這個任務執(zhí)行的時間較長,就會導致「線程阻塞」。

異步模式,即與同步模式相反,可以一起執(zhí)行多個任務,函數(shù)調(diào)用后不會立即返回執(zhí)行的結果,如果任務A需要等待,可先執(zhí)行任務B,等到任務A結果返回后再繼續(xù)回調(diào)。 定時器就是一個典型的異步模式,異步任務會在當前腳本的所有同步任務執(zhí)行完才會執(zhí)行。

2、Promise

Promise對象代表一個未完成、但預計將來會完成的操作。它有三種狀態(tài):

  • pending:初始值,不是fulfilled,也不是rejected
  • fulfilled:代表操作成功
  • rejected:代表操作失敗

Promise有兩種狀態(tài)改變的方式,既可以從pending轉變?yōu)?code>fulfilled,也可以從pending轉變?yōu)?code>rejected。一旦狀態(tài)改變,就「凝固」了,會一直保持這個狀態(tài),不會再發(fā)生變化。當狀態(tài)發(fā)生變化,promise.then綁定的函數(shù)就會被調(diào)用。
注意:Promise一旦新建就會「立即執(zhí)行」,無法取消。這也是它的缺點之一。

//構建Promise
var promise = new Promise(function (resolve, reject) {
    if (/* 異步操作成功 */) {
        resolve(data);
    } else {
        /* 異步操作失敗 */
        reject(error);
    }
});

類似構建對象,我們使用new來構建一個Promise。Promise接受一個「函數(shù)」作為參數(shù),該函數(shù)的兩個參數(shù)分別是resolvereject。這兩個函數(shù)就是就是「回調(diào)函數(shù)」,由JavaScript引擎提供。

resolve函數(shù)的作用:在異步操作成功時調(diào)用,并將異步操作的結果,作為參數(shù)傳遞出去;?
reject函數(shù)的作用:在異步操作失敗時調(diào)用,并將異步操作報出的錯誤,作為參數(shù)傳遞出去。

Promise實例生成以后,可以用then方法指定resolved狀態(tài)和reject狀態(tài)的回調(diào)函數(shù)。

then方法會返回一個Promise。它有兩個參數(shù),分別為Promise從pending變?yōu)?code>fulfilled和rejected時的回調(diào)函數(shù)(第二個參數(shù)非必選)。這兩個函數(shù)都接受Promise對象傳出的值作為參數(shù)

promise.then(onFulfilled, onRejected);
promise.then(function(data) {
  // do something when success
}, function(error) {
  // do something when failure
});

簡單來說,then就是定義resolvereject函數(shù)的,其resolve參數(shù)相當于:

function resolveFun(data) {
    //data為promise傳出的值
}

而新建Promise中的'resolve(data)',則相當于執(zhí)行resolveFun函數(shù)。
Promise新建后就會立即執(zhí)行。而then方法中指定的回調(diào)函數(shù),將在當前腳本所有同步任務執(zhí)行完才會執(zhí)行。如下例:

var promise = new Promise(function(resolve, reject) {
  console.log('before resolved');
  resolve();
  console.log('after resolved');
});

promise.then(function() {
  console.log('resolved');
});

console.log('outer');

-------output-------
before resolved
after resolved
outer
resolved

由于resolve指定的是異步操作成功后的回調(diào)函數(shù),它需要等所有同步代碼執(zhí)行后才會執(zhí)行,因此最后打印'resolved'

來源:https://www./content-4-334201.html

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多