为了解决回调地狱的问题,所以出现了promise的设计思想。
promise的三种状态:
- pending 等待状态
- resolved 完成状态
- rejected 拒绝状态
promise的三种状态,只能是pending->resolved或者pending->rejected,不能有其他类型的状态转换,并且状态一旦发生转换,就不再发生变化。
promise的方法:
1.then
2.all
3.race
上例子吧 :
例子1:在异步的读取完a1,a2,a3,a4,a5的文件之后,执行一个总的方法。
1 ‘use strict‘; 2 //这是一个简单的应用 3 //要求:在异步读完a1.txt,a2.txt,a3.txt,a4.txt的时候执行一个总的方法 4 var Promise = require(‘bluebird‘); 5 var fs = require("fs") ; 6 7 8 var promises = []; 9 10 //Promise all方法的使用 11 for(var i = 1; i < 5; i++){ 12 var promise = new Promise(function(resolve,reject){ 13 fs.readFile("a" + i + ".txt","utf8",function (error,data){ 14 if(error){ 15 reject(error) 16 }else{ 17 resolve(data) 18 } 19 }) ; 20 }); 21 promises.push(promise); 22 } 23 24 Promise.all(promises).then(function(data){ 25 console.log(data); 26 }).catch(function(e){ 27 console.log(e); 28 }); //
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 }
span.s1 { font: 12.0px ".PingFang SC" }
[ ‘this is a1 !‘, ‘this is a2 !‘, ‘this is a3 !‘, ‘this is a4 !‘ ]
例子2:在异步的读取a1,a2,a3,a4,a5的文件之后,只要有一个文件读取完成,就执行最后的方法。
1 "use strict"; 2 3 var Promise = require("bluebird"); 4 var fs = require("fs"); 5 6 var promises = []; 7 8 //Promise race方法的使用 9 for(var i = 1; i < 5; i++){ 10 var promise = new Promise(function(resolve,reject){ 11 fs.readFile("a" + i + ".txt","utf8",function (error,data){ 12 if(error){ 13 reject(error) 14 }else{ 15 resolve(data) 16 } 17 }) ; 18 }); 19 promises.push(promise); 20 } 21 Promise.race(promises).then(function(data){ 22 console.log(data); 23 }).catch(function(e){ 24 console.log(e); 25 })//this is a1 !
例子3:要求:在读完a1.txt的时候读a2.txt,在读完a2.txt,读a3,然后a4.
1 var a1 = new Promise(function(resolve,reject){ 2 fs.readFile(‘a1.txt‘,‘utf8‘,function(error,data){ 3 if(error){ 4 reject(error); 5 }else{ 6 resolve(data); 7 } 8 }); 9 }); 10 var ss = a1.then(function(){ 11 return new Promise(function(resolve,reject){ 12 fs.readFile(‘a2.txt‘,‘utf8‘,function(error,data){ 13 if(error){ 14 reject(error); 15 }else{ 16 resolve(data); 17 } 18 }); 19 }); 20 }).then(function(){ 21 return ‘yanjinyun‘; 22 /*return new Promise(function(resolve,reject){ 23 fs.readFile(‘a3.txt‘,‘utf8‘,function(error,data){ 24 if(error){ 25 reject(error); 26 }else{ 27 resolve(data); 28 } 29 }); 30 });*/ 31 }).then(function(data){ 32 return new Promise(function(resolve,reject){ 33 fs.readFile(‘a4.txt‘,‘utf8‘,function(error,data){ 34 if(error){ 35 reject(error); 36 }else{ 37 resolve(data); 38 } 39 }); 40 }); 41 }).catch(function(e){ 42 43 });
时间: 2024-10-29 19:08:27