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 相关文章推荐
验证javascript中Object和Function的关系的三段简单代码
Jun 27 Javascript
node.js中的fs.lstat方法使用说明
Dec 16 Javascript
javascript 构造函数方式定义对象
Jan 02 Javascript
Jquery解析json字符串及json数组的方法
May 29 Javascript
Bootstrap每天必学之警告框插件
Apr 26 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
Aug 24 Javascript
简单实现Bootstrap标签页
Aug 09 Javascript
基于javascript实现最简单选项卡切换
Feb 01 Javascript
vue图片加载与显示默认图片实例代码
Mar 16 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
Feb 26 Javascript
详解vue的diff算法原理
May 20 Javascript
微信小程序 Storage更新详解
Jul 16 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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
php实现文件上传基本验证
2020/03/04 PHP
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
Python机器学习之SVM支持向量机
2017/12/27 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
python3下载抖音视频的完整代码
2019/06/05 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
Python扫描端口的实现
2021/01/25 Python
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
365 Tickets英国:全球景点门票
2019/07/06 全球购物
关于Java String的一道面试题
2013/09/29 面试题
How to spawning asynchronous work in J2EE
2016/08/29 面试题
2014年扶贫帮困工作总结
2014/12/09 职场文书
党建工作汇报材料
2014/12/24 职场文书
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS