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 相关文章推荐
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
angularJS提交表单(form)
Feb 09 Javascript
jquery插件splitScren实现页面分屏切换模板特效
Jun 16 Javascript
jquery遍历函数siblings()用法实例
Dec 24 Javascript
js创建对象几种方式的优缺点对比
Sep 28 Javascript
巧用Javascript的逻辑运算符
Dec 02 Javascript
纯JS单页面赛车游戏制作代码分享
Mar 03 Javascript
微信小程序Redux绑定实例详解
Jun 07 Javascript
JS实现手写parseInt的方法示例
Sep 24 Javascript
vue 自定义全局方法,在组件里面的使用介绍
Feb 28 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
Sep 15 Javascript
详解Vue slot插槽
Nov 20 Vue.js
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/11/30 日漫
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
JavaScript字符串常用类使用方法汇总
2015/04/14 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
ES6 fetch函数与后台交互实现
2018/11/14 Javascript
详解JavaScript中的函数、对象
2019/04/01 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
python中self原理实例分析
2015/04/30 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
大学生护理专业自荐信
2013/10/03 职场文书
入团者的自我评价分享
2013/12/02 职场文书
保密承诺书范文
2014/03/27 职场文书
英语故事演讲稿
2014/04/29 职场文书
政府会议通知范文
2015/04/15 职场文书
简爱读书笔记
2015/06/26 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers
Python基本的内置数据类型及使用方法
2022/04/13 Python