ES6 Promise 对象扯谈

new Promise( /* executor */ function(resolve, reject) { ... } );

Promise的构造函数接收一个函数作为参数,函数里面传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。其实这里用“成功”和“失败”来描述并不准确,按照标准来讲,resolve是将Promise的状态置为fullfiled,reject是将Promise的状态置为rejected。如下

function aysnloop(){var p = new Promise(function(resolve, reject){setTimeout(function(){console.log('hello');resolve()},100);});return p;}

Promise 有什么用呢?为什么那么火呢?为什么会被纳入到es6里面呢?

来来来,我们把上面的咧子多拷贝两份

function aysnloop1(){var p = new Promise(function(resolve, reject){setTimeout(function(){console.log('good');resolve('good')},100);});return p;}

function aysnloop2(){var p = new Promise(function(resolve, reject){setTimeout(function(){console.log('mans');resolve('man');},100);});return p;}

再用下面代码打印看看:

aysnloop().then(function(data){console.log('123');return aysnloop1();}).then(function(){console.log(456);return aysnloop2();}).then(function(data){console.log(789)})

是不是明白了?

没错,异步回调函数的解决方案,著名的node 死锁问题都得可以用他解决。

把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。

附加官方文档,简单粗暴。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

JavaScript中MutationObServer监听DOM元素详解

DOM的MutationObServer接口,可以在DOM被修改时异步执行回调函数,我的理解就是可以监听DOM修改。基本使用可以通过MutationObserver构造函数实例化,参数是一个回调函数。jsletobservernewMutationObserver(()console.log("change"));console.log(obs

thinkcmf+jsapi 实现微信支付

首先从小程序端接收订单号、金额等参数,然后后台进行统一下单,把微信支付的订单号返回,在把订单号发送给前台,前台拉起支付,返回参数后更改支付状态。。。回调publicfunctionnotify(){$wechatDb::name('wechat')where('status',1)find();