1. 程式人生 > >Promise的含義和用法

Promise的含義和用法

這裡寫圖片描述
含義
Promise是非同步程式設計的一種解決方案。

Promise物件有以下2個特點:
1.物件的狀態不受外界影響。Promise物件代表一個非同步操作,有三種狀態:Pending(進行中)、Resolved(已完成)和Rejected(已失敗)。只有非同步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。這也是Promise這個名字的由來,它的英語意思就是“承諾”,表示其他手段無法改變。
2.一旦狀態改變,就不會再變,任何時候都可以得到這個結果。Promise物件的狀態改變,只有兩種可能:從Pending變為Resolved;從Pending變為Rejected。只要這兩種情況發生,狀態就凝固了,不會再變了,會一直保持這個結果。就算改變已經發生了,你再對Promise物件田靜回撥函式,也會立即得到這個結果。這與事件(Event)完全不同,事件的特點是,如果你錯過了它,再去監聽,是得不到結果的。

有了Promise物件,就可以將非同步操作以同步操作的流程表達出來,避免了層層巢狀的回撥函式。

Promise建構函式有倆引數: resolve reject
2.用法

function runAsync1(){
var p = new Promise(function(resolve, reject){
//做一些非同步操作
setTimeout(function(){
console.log('非同步任務1執行完成');
resolve('隨便什麼資料1');
}, 2000);
});
return p;
}
function runAsync2(){
var p = new Promise(function(resolve, reject){
//做一些非同步操作
setTimeout(function(){
console.log('非同步任務2執行完成');
resolve('隨便什麼資料2');
}, 2000);
});
return p;
}
function runAsync3(){
var p = new Promise(function(resolve, reject){
//做一些非同步操作
setTimeout(function(){
console.log('非同步任務3執行完成');
resolve('隨便什麼資料3');
}, 2000);
});
return p;
}
runAsync1()
.then(function(data){
console.log(data);
return runAsync2();
})
.then(function(data){
console.log(data);
return runAsync3();
})
.then(function(data){
console.log(data);
});

這裡寫圖片描述
每隔兩秒執行
它們是層層依賴的關係,下一步的的操作需要使用上一部操作的結果。(這裡使用 setTimeout 模擬非同步操作)
使用 then 鏈式呼叫這三個方法

非同步載入圖片

function loadImageAsync(url){
  return new Promise(function(resolve,reject){
    var image = new Image();
    image.onload = function(){
      resolve(image);
    };
    image.onerror = function(){
      reject(new
Error('Could not load image at' + url)); }; image.src = url; }); }

這裡寫圖片描述
resolve(this.response);//會將引數傳遞給回撥函式

相關推薦

Promise含義用法

含義 Promise是非同步程式設計的一種解決方案。 Promise物件有以下2個特點: 1.物件的狀態不受外界影響。Promise物件代表一個非同步操作,有三種狀態:Pending(進行中)、Resolved(已完成)和Rejected(已失敗)。

async函式的含義用法

async函式的是什麼? 一句話,async 函式就是 Generator 函式的語法糖。例有一個Generator依次讀取兩個檔案; var fs = require('fs') const readeFile = function(filename){ return new P

int main(int argc,char* argv[]) 的含義用法

  1、基本概念   argc,argv 用 命令列編譯程式時有用。   主函式main中變數(int argc,char *argv[ ])的含義,有些 編譯器允許將main()的返回型別宣告為void,這已不再是合法的C++   main(int argc

tf.nn.max_pool引數含義用法

max pooling是CNN當中的最大值池化操作,其實用法和卷積很類似 有些地方可以從卷積去參考【TensorFlow】tf.nn.conv2d是怎樣實現卷積的? tf.nn.max_pool(value, ksize, strides, padding, name=None) 引

PHP函式的引數裡,前面三個點的形式...$args是什麼含義用法

這是PHP5.6新增的功能(一種語法糖):  可以通過...將函式引數儲存在緊接的可遍歷的變數中。 function add($a, $b, $c) { return $a + $b + $c; } $num=[2, 3]; echo add(1, ...$num);

C語言中static的含義用法

———————————– 測試環境:linux 開發語言:c 編譯工具:gcc ———————————– static 顧名思義是靜態、靜止的意思 個人理解的含義是私有、靜態 私有就是隱藏-> 1.static函式只能聲明後的本文中呼叫

UML類圖中箭頭線條的含義用法

本節向大家學習一下UML箭頭、線條代表的意義,UML中關係主要有依賴,聚合,合成,泛化和實現等,下面就讓我們來看一下這些關係如何用UML箭頭和線條來實現。 UML箭頭、線條程式 關係 後面的例子將針對某個具體目的來獨立地展示各種關係。雖然語法無誤,但這些例子可進一步精煉,在它們的有效範圍內包括更多的語義。

xstream中幾個註解的含義用法

XStream是個很強大的工具,能將java物件和xml之間相互轉化。xstream不在意java類中成員變數是私有還是公有,也不在乎是否有預設建構函式。它呼叫方式也非常簡單:從xml物件轉化為java物件,使用fromXML()方法;從java物件序列化為xml,toXM

c語言操作符的含義用法

不變 條件 們的 邏輯 強制 算數 關系操作符 位操作 != c語言的操作符有:1、算數操作符;= 、-、、 %、 /、2、移位操作符:>>、<<(1)邏輯移位左邊用0填充,右邊丟棄(2)算術移位左邊用原符號位補充,右邊丟棄(3)正數的原,反,補,碼

Promise物件的含義基本用法

1.Promise的含義 Promise是非同步程式設計的一種解決方案,比傳統的解決方案(回撥函式和事件)更合理更強大。 所謂Promise,簡單說就是一個容器,裡面儲存著某個未來才會結束的事件 (通常是一個非同步操作)的結果。從語法上說,Promise是一

PHP中的符號 ->、=> :: 的含義用法

php新手經常碰到的問題,->、=> 和 :: 這三個傢伙是什麼分別都是做什麼的啊!看著就很暈。 沒關係,下面我們做一下詳細的解釋,如果你有C++,Perl基礎,你會發現這些傢伙和他們裡面的一些符號功能是差不多的。 ‘- >’符號是“插入式解引用操作符”(infix dereferenc

main函式中引數argcargv含義用法

opencv中main函式一般形式:int main(int argc, char** argv) 其中,argc是argumentcount的縮寫,表示傳入main函式的引數個數;    argv 是argument vector的縮寫,表示傳入main函式的引數序列或

C++ main函式中引數argcargv含義用法

argc 是 argument count的縮寫,表示傳入main函式的引數個數; argv 是 argument vector的縮寫,表示傳入main函式的引數序列或指標,並且第一個引數argv[0

position的定義用法

位置 stat top 沒有 出現 瀏覽器 第一個 sta class absolute 生成絕對定位的元素,相對於 static 定位以外的第一個父元素進行定位。 元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規定。

GET,POST,PUT,DELETE的區別 用法

網關 到你 服務端 utf-8 option 數學 返回 由於 ces Http定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,我們可以這樣認為:一個URL地址,它用於描述一個網絡上的資源,而HTTP中

emrem的概念用法

繼承 瀏覽器 不支持 pan rem 一個 size nbsp 計算 em 相對長度單位 相對參照物為父元素的font-size em有繼承性 沒有設置font-size時, 瀏覽器會有一個默認的em設置 rem 相對參照物為根元素html, 相當於參照物固定不變 比

nth-child,nth-last-child,only-child,nth-of-type,nth-last-of-type,only-of-type,first-of-type,last-of-type,first-child,last-child偽類區別用法

type nth 只有一個 not 同時 選擇器 -type span 進行 我將這坨偽類分成三組,第一組:nth-child,nth-last-child,only-child第二組:nth-of-type,nth-last-of-type,第三組:first-of-tp

最齊全的站點元數據meta標簽的含義使用方法

科學計算器 rar days fresh dsm dev 預覽 官方文檔 web 最齊全的站點元數據meta標簽的含義和使用方法 隨著HTML5的流行和Web技術的不斷演變,Meta標簽隊伍也越來越壯大,從Windows XP的IE6到現在Windows 7、Wind

Java中枚舉的寫法用法

一個 lang 公司 nbsp -h Language integer com bsp 在公司代碼中,用了一大堆的枚舉,看得我好懵逼。下面開始看看枚舉怎麽寫和怎麽用。一、枚舉的寫法 關於枚舉的寫法,網上好多這方面的知識。這裏直接貼一個我自己寫的

linux有關命令的幫助用法查看

linux基礎命令 man whatis info 本文檔主要整理了當使用linux命令時遇到瓶頸時可以解決/找到所需命令的方法,寫的不全,後續補充,1:whatis 命令 ##查看命令的功能 命令 --help ##查看命令的幫助 [] ##選