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 iframe中打开文件,并检测iframe存在否
Dec 28 Javascript
jQuery 获取URL参数的插件
Mar 04 Javascript
js 字符串转化成数字的代码
Jun 29 Javascript
基于jQuery的前端数据通用验证库
Aug 08 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
Dec 25 Javascript
Javscript删除数组中指定元素并返回新数组
Mar 06 Javascript
jQuery提示效果代码分享
Nov 20 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
Jan 27 Javascript
AngularJS之依赖注入模拟实现
Aug 19 Javascript
JS填写银行卡号每隔4位数字加一个空格
Dec 19 Javascript
Vue.js项目部署到服务器的详细步骤
Jul 17 Javascript
微信小程序如何播放腾讯视频的实现
Sep 20 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中协程和阻塞的一些理解与思考
2017/08/11 PHP
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
python实现根据图标提取分类应用程序实例
2014/09/28 Python
Python中的生成器和yield详细介绍
2015/01/09 Python
Python语法分析之字符串格式化
2019/06/13 Python
python实现五子棋小程序
2019/06/18 Python
详解python播放音频的三种方法
2019/09/23 Python
Django实现文件上传下载
2019/10/06 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
使用Python发现隐藏的wifi
2020/03/04 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
HTTP状态码详解
2021/03/18 杂记
Html5新增标签有哪些
2017/04/13 HTML / CSS
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
eBay德国站:eBay.de
2017/09/14 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
季度思想汇报
2014/01/01 职场文书
校庆接待方案
2014/03/18 职场文书
法律专业求职信
2014/05/24 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
立项申请报告范本
2015/05/15 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
多表查询、事务、DCL
2021/04/05 MySQL
详细了解MVC+proxy
2021/07/09 Java/Android
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫