javascript使用Promise对象实现异步编程


Posted in Javascript onMarch 01, 2016

Promise对象是CommonJS工作组为异步编程提供的统一接口,是ECMAScript6中提供了对Promise的原生支持,Promise就是在未来发生的事情,使用Promise可以避免回调函数的层层嵌套,还提供了规范更加容易的对异步操作进行控制。提供了reject,resolve,then和catch等方法。

使用PROMISE

Promise是ES6之后原生的对象,我们只需要实例化Promise对象就可以直接使用。
实例化Promise:

var promise = new Promise(function (resolve, reject) {
  console.log('begin do something');
  if (Math.random() * 10.0 > 5) {
    console.log(" run success");
    resolve();
  } else {
    console.log(" run failed");
    reject();

  }
});

这里定义了一个回调方法function(resolve,reject),如果成功了就调用resolve,失败了就会调用reject。
Promise.prototype.then是Promise执行完之后的回调,可以用then方法分别指定resolve和reject的回调。

promise.then(function () {
  console.log(' resolve from promise');
}, function () {
  console.log(' reject from promise');
});

执行结果一:

begin do something
 run success
 resolve from promise

执行结果二:

begin do something
 run failed
 reject from promise

使用PROMISE进行网络请求

getRequest = function (url) {
  var promise = new Promise(function (resolve, reject) {
    var request = require('request');
    request(url, function (error, respones, body) {
      if (error) {
        reject(error);
        return;
      }
      if (respones.statusCode == 200) {
        resolve(body)

      } else {
        reject(respones.status);

      }
    });
  });
  return promise;

};

getRequest("https://github.com/").then(function (result) {
  console.log(result);
}, function (error) {
  console.error('error', error);
});

使用Promise进行网络请求,也可以使用Promise在浏览上实现Ajax请求。

代码地址:https://github.com/jjz/node

Javascript 相关文章推荐
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
Mar 18 Javascript
javascript实现图片自动和可控的轮播切换特效
Apr 13 Javascript
JavaScript实现数组随机排序的方法
Jun 26 Javascript
JavaScript模拟数组合并concat
Mar 06 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
May 10 Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 Javascript
JavaScript之map reduce_动力节点Java学院整理
Jun 29 Javascript
vue.js异步上传文件前后端实现代码
Aug 22 Javascript
AngularJS的$location使用方法详解
Oct 19 Javascript
详解Vue-Router源码分析路由实现原理
May 15 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
Jul 19 Javascript
搭建vscode+vue环境的详细教程
Aug 31 Javascript
javascript html5实现表单验证
Mar 01 #Javascript
javascript中FOREACH数组方法使用示例
Mar 01 #Javascript
JS实现Select的option上下移动的方法
Mar 01 #Javascript
angular2使用简单介绍
Mar 01 #Javascript
JS实现的在线调色板实例(附demo源码下载)
Mar 01 #Javascript
Bootstrap每天必学之导航条(二)
Mar 01 #Javascript
JavaScript实现简洁的俄罗斯方块完整实例
Mar 01 #Javascript
You might like
php中让人头疼的浮点数运算分析
2016/10/10 PHP
Javascript之文件操作
2007/03/07 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
Jquery iframe内部出滚动条
2010/02/11 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
详细探究Python中的字典容器
2015/04/14 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
python leetcode 字符串相乘实例详解
2018/09/03 Python
python进行TCP端口扫描的实现
2018/12/21 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
给公司的建议书范文
2014/05/13 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书