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 相关文章推荐
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
javascript 程序库的比较(一)之DOM功能
Apr 07 Javascript
一个原生的用户等级的进度条
Jul 03 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
javascript限制文本框输入值类型的方法
May 07 Javascript
简介AngularJS中使用factory和service的方法
Jun 17 Javascript
Jquery实现简单的轮播效果(代码管用)
Mar 14 Javascript
AngularJS中实现动画效果的方法
Jul 28 Javascript
基于JavaScript实现轮播图原理及示例
Apr 10 Javascript
Angular 4环境准备与Angular cli创建项目详解
May 27 Javascript
Angularjs单选框相关的示例代码
Aug 17 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
Sep 01 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 magic_quotes_gpc的使用方法详解
2013/06/24 PHP
深入解析php中的foreach问题
2013/06/30 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
Node.js之readline模块的使用详解
2019/03/25 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
python实现决策树分类(2)
2018/08/30 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
学校感恩教育活动总结
2014/07/07 职场文书
优秀教师个人总结
2015/02/11 职场文书
学校捐书活动总结
2015/05/08 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android