对于ES6中Promise的个人见解
1.js中常见的异步
- JavaScript可以响应用户的一些异步交互,比如单击鼠标和按键盘等操作。
 let button = document.getElementById("btn");
 buttom.onclick = function(event){
     console.log(“I was clicked !!")
 };
- 在Node.js中更是使用大量的回调来代替事件来实现异步编程。
node中读取文件方法及参数
fs.readFile(filename, [encoding], [callback(err,data)]);
 var fs = require('fs');
 fs.readFile('/Users/xiaosong/Desktop/example.txt', 'utf-8', function (err, data) {
     if (err) {
         console.log(err);
     } else {
         console.log(data);
     }
 });
2.但是事件和回调并不能满足需求,比如像并行执行两个异步操作,两个操作结束时都通知你,或者说同时进行两个异步操作,
想要优先完成的通知你。想要满足这些你可能写很多的回调,而Promise可以很好的解决这些问题。
3.那么什么是Promise呢?
- 我的理解就是它只是另一种异步编程的选择,就像事件和回调函数一样指定稍后执行的代码,但是它可以指示代码是否成功的执行,基于成功和失败的状态分别执行什么,更加易于理解和调试。
 let fs = require("fs");
 function readFile(filename){
     return new Promise(function(resolve,reject){
         // Promise只接受一个参数叫做执行器函数,接受resolve和reject两个函数
         fs.readFile(filename,{encoding:"utf-8"},function(err,data){
             //错误优先,检查是否出错
             if(err){
                 reject(err);
                 return;
             }
             //成功读取文件
             resolve(data);
         });
     });
 };
 let promise = readFile("/Users/xiaosong/Desktop/example.txt");
 promise.then(function(data){
     //完成
     console.log(data);
 },function(err){
     //拒绝
     console.log(err.message);
 });
输出的是---->就算失败也要摆出豪迈的姿态。<---- 很明显这是陈咬金的台词!!
这就是一个完整的Promise了。看到这里感觉估计还是蒙逼的请让在下为你细细道来
let promise = new Promise(function(reslove,reject){
    console.log("A");
    reslove();
});
promise.then(function(){
    console.log("B");
});
console.log("C");
输出ACB
- 为什么会这样输出呢? 就是因为执行器中调用了resolve();
当这个状态结束后会进入下面两种状态之一:
内部有[[PromiseState]]这个属性来表示这三种状态,但是这个属性又没有在Promise上暴漏出来所以并不能对它进行编程来检测Promise所处的状态,那么怎么办呢。
promise.then(function(data){
    //完成
    console.log(data);
},function(err){
    //拒绝
    console.log(err.message);
});
promise.then(null,function(err){
    //拒绝
    console.log(err.message);
});
那么我以上讲的创建的都是未完成的Promise,可能乍一看来创建未完成的Promise尚且有意义但是创建已处理的有什么意义呢!
let promise = Promise.reject("我是一段安静的文字,你不会知道我是安静的");
promise.catch(function(value){
    console.log(value); // 我是一段安静的文字,你不会知道我是安静的
});
let promise = Promise.resolve("我是一段安静的文字,你不会知道我是安静的");
promise.then(function(value){
    console.log(value); // 我是一段安静的文字,你不会知道我是安静的
});
有then()方法并且接受resolve和reject两个参数的普通对象:
let thenable = {
    then: function(resolve, reject){
        resolve("我是一段开心的文字,没人知道我在乐啥");
    }
};
let promise = Promise.resolve(thenable);
promise.then(function(value){
    console.log(value) //我是一段开心的文字,没人知道我在乐啥
});
<script>
function MyPromise(func){
var deferred = $.Deferred();
func(deferred.resolve, deferred.reject);
return deferred.promise();
};
new MyPromise(function(resolve, reject){
console.log(1);
resolve();
console.log(2);
}).then(function(){
console.log(3);
});
console.log(4);
// 在jquery1.6.4的版本下输出是1234
// 在jquery3.2.1中输出是 1243
</script>
在ES6中
new Promise(function (resolve,reject) {
    console.log(1);
    resolve();
    console.log(2);
}).then(function () {
    console.log(3);
});
console.log(4);
// 这里同样输出的也是1243
从这里看JQuery也是在向标准看齐的。
let promise = new Promise(function(resolve,reject){
    resolve("淡定的文字");
});
promise.then(function(value){
    console.log(value);
    return value + ",不开心"
}).then(function(value){
    console.log(value);
    return value + "怎么办"
}).then(function(value){
    console.log(value);
    throw new Error("又错了");
}).catch(function(err){
    console.log(err.message);
});
输出:
  淡定的文字
  淡定的文字,不开心
  淡定的文字,不开心怎么办
  又错了
我是这样理解的每一次调用then()后都会再一次返回一个新的promise,这样新的Promise就又会接着调用后面的then()就这样一直下去直到最后一个then();
let p1 = new Promise(function(resolve,reject){
    resolve("OK one");
});
let p2 = new Promise(function(resolve,reject){
    reject("refuse two");
});
let p3 = new Promise(function(resolve,reject){
    resolve("OK three");
});
let p4 = Promise.all([p1,p2,p3]);
p4.catch(function(value){
    console.log(Array.isArray(value)); //false
})
let p1 = new Promise(function(resolve,reject){
    resolve("OK one");
});
let p2 = new Promise(function(resolve,reject){
    resolve("refuse two");
});
let p3 = new Promise(function(resolve,reject){
    resolve("OK three");
});
let p4 = Promise.all([p1,p2,p3]);
p4.then(function(value){
    console.log(Array.isArray(value)); //true
})
8.能够监听多个Promise的方法还有Promise.race();它的参数和Promise.all()是相同的,返回的也是一个Promise,但是使用这个方法监听的是最先被解决的Promise,谁先被解决就返回谁,无需等到所有的Promise都完成。
let p1 = new Promise(function(resolve,reject){
    setTimeout(function(){
    resolve("OK one");
    },200);
});
let p2 = new Promise(function(resolve,reject){
    setTimeout(function(){
        resolve("OK two");
    },100);
});
let p3 = new Promise(function(resolve,reject){
    setTimeout(function(){
        resolve("OK three");
    },300);
});
let p4 = Promise.race([p1,p2,p3]);
p4.then(function(value){
    console.log(value); //two
})
ok 这就是我对promise的浅见。
---恢复内容结束---
1.js中常见的异步
- JavaScript可以响应用户的一些异步交互,比如单击鼠标和按键盘等操作。
 let button = document.getElementById("btn");
 buttom.onclick = function(event){
     console.log(“I was clicked !!")
 };
- 在Node.js中更是使用大量的回调来代替事件来实现异步编程。
node中读取文件方法及参数
fs.readFile(filename, [encoding], [callback(err,data)]);
 var fs = require('fs');
 fs.readFile('/Users/xiaosong/Desktop/example.txt', 'utf-8', function (err, data) {
     if (err) {
         console.log(err);
     } else {
         console.log(data);
     }
 });
2.但是事件和回调并不能满足需求,比如像并行执行两个异步操作,两个操作结束时都通知你,或者说同时进行两个异步操作,
想要优先完成的通知你。想要满足这些你可能写很多的回调,而Promise可以很好的解决这些问题。
3.那么什么是Promise呢?
- 我的理解就是它只是另一种异步编程的选择,就像事件和回调函数一样指定稍后执行的代码,但是它可以指示代码是否成功的执行,基于成功和失败的状态分别执行什么,更加易于理解和调试。
 let fs = require("fs");
 function readFile(filename){
     return new Promise(function(resolve,reject){
         // Promise只接受一个参数叫做执行器函数,接受resolve和reject两个函数
         fs.readFile(filename,{encoding:"utf-8"},function(err,data){
             //错误优先,检查是否出错
             if(err){
                 reject(err);
                 return;
             }
             //成功读取文件
             resolve(data);
         });
     });
 };
 let promise = readFile("/Users/xiaosong/Desktop/example.txt");
 promise.then(function(data){
     //完成
     console.log(data);
 },function(err){
     //拒绝
     console.log(err.message);
 });
输出的是---->就算失败也要摆出豪迈的姿态。<---- 很明显这是陈咬金的台词!!
这就是一个完整的Promise了。看到这里感觉估计还是蒙逼的请让在下为你细细道来
let promise = new Promise(function(reslove,reject){
    console.log("A");
    reslove();
});
promise.then(function(){
    console.log("B");
});
console.log("C");
输出ACB
- 为什么会这样输出呢? 就是因为执行器中调用了resolve();
当这个状态结束后会进入下面两种状态之一:
内部有[[PromiseState]]这个属性来表示这三种状态,但是这个属性又没有在Promise上暴漏出来所以并不能对它进行编程来检测Promise所处的状态,那么怎么办呢。
promise.then(function(data){
    //完成
    console.log(data);
},function(err){
    //拒绝
    console.log(err.message);
});
promise.then(null,function(err){
    //拒绝
    console.log(err.message);
});
那么我以上讲的创建的都是未完成的Promise,可能乍一看来创建未完成的Promise尚且有意义但是创建已处理的有什么意义呢!
let promise = Promise.reject("我是一段安静的文字,你不会知道我是安静的");
promise.catch(function(value){
    console.log(value); // 我是一段安静的文字,你不会知道我是安静的
});
let promise = Promise.resolve("我是一段安静的文字,你不会知道我是安静的");
promise.then(function(value){
    console.log(value); // 我是一段安静的文字,你不会知道我是安静的
});
有then()方法并且接受resolve和reject两个参数的普通对象:
let thenable = {
    then: function(resolve, reject){
        resolve("我是一段开心的文字,没人知道我在乐啥");
    }
};
let promise = Promise.resolve(thenable);
promise.then(function(value){
    console.log(value) //我是一段开心的文字,没人知道我在乐啥
});
<script>
function MyPromise(func){
var deferred = $.Deferred();
func(deferred.resolve, deferred.reject);
return deferred.promise();
};
new MyPromise(function(resolve, reject){
console.log(1);
resolve();
console.log(2);
}).then(function(){
console.log(3);
});
console.log(4);
// 在jquery1.6.4的版本下输出是1234
// 在jquery3.2.1中输出是 1243
</script>
在ES6中
new Promise(function (resolve,reject) {
    console.log(1);
    resolve();
    console.log(2);
}).then(function () {
    console.log(3);
});
console.log(4);
// 这里同样输出的也是1243
从这里看JQuery也是在向标准看齐的。
let promise = new Promise(function(resolve,reject){
    resolve("淡定的文字");
});
promise.then(function(value){
    console.log(value);
    return value + ",不开心"
}).then(function(value){
    console.log(value);
    return value + "怎么办"
}).then(function(value){
    console.log(value);
    throw new Error("又错了");
}).catch(function(err){
    console.log(err.message);
});
输出:
  淡定的文字
  淡定的文字,不开心
  淡定的文字,不开心怎么办
  又错了
我是这样理解的每一次调用then()后都会再一次返回一个新的promise,这样新的Promise就又会接着调用后面的then()就这样一直下去直到最后一个then();
let p1 = new Promise(function(resolve,reject){
    resolve("OK one");
});
let p2 = new Promise(function(resolve,reject){
    reject("refuse two");
});
let p3 = new Promise(function(resolve,reject){
    resolve("OK three");
});
let p4 = Promise.all([p1,p2,p3]);
p4.catch(function(value){
    console.log(Array.isArray(value)); //false
})
let p1 = new Promise(function(resolve,reject){
    resolve("OK one");
});
let p2 = new Promise(function(resolve,reject){
    resolve("refuse two");
});
let p3 = new Promise(function(resolve,reject){
    resolve("OK three");
});
let p4 = Promise.all([p1,p2,p3]);
p4.then(function(value){
    console.log(Array.isArray(value)); //true
})
8.能够监听多个Promise的方法还有Promise.race();它的参数和Promise.all()是相同的,返回的也是一个Promise,但是使用这个方法监听的是最先被解决的Promise,谁先被解决就返回谁,无需等到所有的Promise都完成。
let p1 = new Promise(function(resolve,reject){
    setTimeout(function(){
    resolve("OK one");
    },200);
});
let p2 = new Promise(function(resolve,reject){
    setTimeout(function(){
        resolve("OK two");
    },100);
});
let p3 = new Promise(function(resolve,reject){
    setTimeout(function(){
        resolve("OK three");
    },300);
});
let p4 = Promise.race([p1,p2,p3]);
p4.then(function(value){
    console.log(value); //two
})
ok 这就是我对promise的浅见。
对于ES6中Promise的个人见解的更多相关文章
- ES6中Promise对象个人理解
		Promise是ES6原生提供的一个用来传递异步消息的对象.它减少了传统ajax金字塔回调,可以将异步操作以同步操作的流程表达出来使得代码维护和可读性方面好很多. Promise的状态: 既然是用来传 ... 
- ES6中promise的使用方法
		先看看ES5中异步编程的使用. let ajax = function (callBlack) { setTimeout(function () { callBlack && call ... 
- ES6中promise总结
		一.什么是ES6的Promise 讲太多也没有.直接在打印出来就好,console.dir(Promise) Promise 是一个构造函数,自身有all, reject, resolve 这几个眼熟 ... 
- ES6 中 Promise
		在说Promise之前我们先简单说一下什么是同步异步? 同步(Sync):所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 异步(Async):异步与同步相对, ... 
- ES6中Promise的入门(结合例子)
		一.Promise的前言 解决回调地狱 //以往回调方式 函数1(function(){ //代码执行...(ajax1) 函数2(function(){ //代码执行...(ajax2) 函数3(f ... 
- ES6 中 Promise 详解
		Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的 API ... 
- ES6中Promise详解
		Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise 提供统一的 AP ... 
- 阿里前端测试题--关于ES6中Promise函数的理解与应用
		今天做了阿里前端的笔试题目,原题目是这样的 //实现mergePromise函数,把传进去的数组顺序先后执行,//并且把返回的数据先后放到数组data中 const timeout = ms => ... 
- 关于ES6中Promise的应用-顺序合并Promise,并将返回结果以数组的形式输出
		1.Promise 基础知识梳理 创建一个Promise实例 const promise = new Promise(function(resolve, reject) { if (success){ ... 
随机推荐
- bzoj1051(明星奶牛)
			这道就是明星奶牛,A了一次又一次了,(⊙o⊙)-(⊙o⊙)- 去年pas就打了不下5次,就是强联通缩点,然后求出度为0的块 判断有多个的话就无解,一个就输出块的大小. #include<cstd ... 
- Average of Levels in Binary Tree
			Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ... 
- jquery.form.js的重置表单增加hidden重置代码
			jquery.form.js的resetForm()方法无法重置hidden元素,打开文件在1460行加上以下代码即可 
- ubuntu的应用程序哪里找
			一般来说11.04以前的桌面是gnome,点左上角的那个小圆圈,会出来一个下拉菜单,里面就有应用程序. 11.10以后的桌面换成unity 在dash中寻找应用程序很不方便,知道名字的还好,不知道名字 ... 
- (10.16)java小作业!
			相信大家刚刚学习java多多少少都会写一些java的基础编程来练练手感,我也不例外!今天想和大家分享一下我最近所接触到的比较有趣的java小编程! 已知a已被赋值,b已被赋值,请编写java程序实现a ... 
- win10 UWP 显示地图
			微软自带的地图很简单 引用地图xmlns:Map="using:Windows.UI.Xaml.Controls.Maps" 写在<Page> 然后在Grid 用Map ... 
- Anroid四大组件service之本地服务
			服务是Android四大组件之一,与Activity一样,代表可执行程序.但Service不像Activity有可操作的用户界面,它是一直在后台运行.用通俗易懂点的话来说: 如果某个应用要在运行时向用 ... 
- eclispe中安装hibernate插件
			用eclispe玩ee的朋友,写配置文件的时候没有提示非常苦恼,而配置dtd文件还是没有得到解决,最后试了试安装插件解决了问题 地址:http://download.jboss.org/jbossto ... 
- 逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构
			逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打 ... 
- 【转】话说C语言const用法
			原文:话说C语言const用法 const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修 ... 
