javascript中的Promise使用


參考自: http://m.jb51.net/article/102642.htm

1、基本用法:

(1)、首先我們new一個Promise,將Promise實例化

(2)、然后在實例化的promise可以傳兩個參數,一個是成功之后的resolve,一個是失敗之后的reject

(3)、Promise實例生成以后,可以用then方法分別指定Resolved狀態和Reject狀態的回調函數

代碼如下:

 

var p1 = function(flag) { 
                
                return new Promise(function(resolve, reject) {
                    if (flag) {
                        console.log('success'); // 處理任本身
                        return resolve('success param'); // 把任務處理的結果傳遞給回掉的then的success方法,作為其參數
                    } else {
                        console.log('failed');
                        return reject('falied param');
                    }
                });
                
            }

 調用p1(true);返回的格式如下:為一個Promise對象, 帶有promiseStatus和promiseValue

此時,狀態就凝固在這了,什么時候調用then, 什么時候執行

 

 調用p1(false);返回的格式如下:為一個Promise對象, 也帶有promiseStatus和promiseValue

 

當promise實例化完成或者調用之后,會返回一個promise對象, 用then方法指定resolved和reject狀態的回掉函數,規定該promise的行為

// 用tr來查看返回值
var tr = p1(true).then(function(value){ // value來接收resolve傳遞過來的參數(返回值) console.log(value) // 根據返回值處理業務邏輯 }, function(value) { //value來接收reject傳遞過來的參數(返回值)
console.log(value); }
);

 then方法返回的依然是一個Promise, 此時的promise沒有返回值,我們可以在then方法中返回任意的值或者一個龍一個promise對象

在then方法中返回一個值, 保存在在返回的promise中

繼續使用這個sr這個promise, 即可調用值獲取返回的值, 返回的依然是一個peomise, peomiseValue為undefined

因為then方法返回的是個promise,所以我們可以使用鏈式寫法, 以同步的操作來表達異步的代碼

連接起來, 使下面三個異步任務按照自己預定的順序執行

 // 定義三個promise

            var p1 = function() {
				
				return new Promise(function(resolve, reject) {
					setTimeout(function() {
						console.log('執行任務1');
						return resolve('任務1結果');
					}, 1500);
				});
				
			};
			
			var p2 = function() {
				
				return new Promise(function(resolve, reject) {
					setTimeout(function() {
						console.log('執行任務2');
						return resolve('任務2結果');
					}, 1500);
				});
				
			};
			
			var p3 = function() {
				
				return new Promise(function(resolve, reject) {
					setTimeout(function() {
						console.log('執行任務3');
						return resolve('任務3結果');
					}, 1500);
				});
				
			};

  // 使用then回掉任務, 順序執行

        p1()
            .then(function(value) {
                console.log(value); 
                return p2(); // 回掉時執行次下一個任務, 返回下一個任務的promiseStatus和promiseValue
            })
            .then(function(value) { // 獲取上一個任務的promiseValue
                console.log(value);
                return p3();
            })
            .then(function(value) {
                console.log(value);
                console.log('end');
            });

 執行結果:

ps:js的操作可以直接在chrome就控制台編寫測試, 不必使用編輯器切換來切換去了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM