promise的学习

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

promise的学习的相关文章

promise的学习心得记录

这里只讲promise,和async的使用方法,不会讲他们的原理. Promise 是异步编程的一种解决方案,可以用于取代传统的回调函数,该变那些函数层层嵌套调用的尴尬局面. 1)promise 基本语法: var p= new Promise(function(resolve,reject){ if(....) resolve(); else reject(.....); }); p.then(function(){//resolve ....... }).catch(function(){/

JavaScript中 Promise的学习以及使用

今天一个哥们发过来一段js代码,没看懂,就顺便学习了一下,代码如下 Promise.resolve('zhangkai').then(value => {console.log(value)}) 经过搜索,才知道是Promise的应用,于是就做一下笔记,整理一下,以及项目中可以派上的用场. 什么是Promise对象 Promise对象是CommonJS工作组为异步编程提供的统一接口,是ECMAScript6中提供了对Promise的原生支持,Promise就是在未来发生的事情,使用Promise

ES6的promise的学习

1.Promise的含义: Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Promise对象. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise是一个对象,从它可以获取异步操作的消息.Promise提供统一的API,各种异步操作都可以用同样的方法进行处理. Promise对象有以下两个特点. (1)

[javascript] Promise简单学习使用

原文地址:http://www.cnblogs.com/dojo-lzz/p/4340897.html 解决回调函数嵌套太深,并行逻辑必须串行执行,一个Promise代表一个异步操作的最终结果,跟Promise交互的主要方式是通过他的then()方法来注册回调函数,去接收Promise的最终结果值 Promise相关的协议有PromiseA和PromiseA+ 定义一个类Promise 定义属性队列queue,初始化空数组[] 定义属性值value,初始化null 定义属性状态status,初始

Javascript Promise对象学习

ES6中的Promise对象 var p = new Promise(function(resolve, reject){ window.setTimeout(function(){ console.log("1",1); resolve(1); },10); }); p.then(function(a){ return new Promise(function(resolve,reject){ window.setTimeout(function(){ console.log(&qu

promise规范学习

/* ecma6 实现了原生的js实现规范 解决异步加载的问题 */ /* es6中原生的promise如何使用 状态 -> pending等待 ->resolve 通过状态 -> reject 拒绝状态 then方法 调用 resolve 和 reject 状态所对应的回调函数 */ 用法: jquery中的用法 <script> /* jquery中的deferred */ $(function() { function show1(time) { // reject可省

promise 的学习

promise 是为了解决异步操作的顺序问题而产生的 特性 promise 的实例一旦创建就会执行里面的异步操作 promise 的实例状态一旦改变就变成凝固的了, 无法再对其作出修改,  (不明白为什么如此设计) then 方法在所有的同步脚本执行完成之后才会执行 promise 会吞掉错误, 也就是内部的错误不影响外部的 在 primise中嵌套 promise, 里面的执行时间决定外面的执行时间 多个 then 是同步执行的, 后面的 then 会等待前面 then 的执行完成 实例方法

前端学习总结(三)javascript——前端世界的精髓所在

一 说一说js的前世,今生与未来 JavaScript历史 要了解JavaScript,首先要回顾一下JavaScript的诞生. 在上个世纪的1995年,当时的网景公司正凭借其Navigator浏览器成为Web时代开启时最著名的第一代互联网公司. 由于网景公司希望能在静态HTML页面上添加一些动态效果,于是一位叫布兰登·艾克(Brendan Eich)的哥们在两周之内设计出了JavaScript语言.你没看错,这哥们只用了10天时间. 这里放上一张Brendan Eich的照片,向大师致敬!(

ES6之Promise用法详解

一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学习一个知识点,肯定是从三个方面出发,what.why.how.下面就跟着我一步步学习吧~ 二 什么是Promise 首先是what.那么什么是Promise呢? 以下是MDN对Promise的定义 The Promise object is used for asynchronous computations. A Promise represents a single asynchronous operation that