码迷,mamicode.com
首页 > 其他好文 > 详细

promise的学习

时间:2016-11-19 12:59:36      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:err   return   end   rom   i++   utf8   txt   ict   eject   

为了解决回调地狱的问题,所以出现了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 });
//

[ ‘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 });

 

promise的学习

标签:err   return   end   rom   i++   utf8   txt   ict   eject   

原文地址:http://www.cnblogs.com/coding4/p/6079937.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!