Promise对象是CommonJS工做组为异步编程提供的统一接口,是ECMAScript6中提供了对Promise的原生支持,Promise就是在将来发生的事情,使用Promise能够避免回调函数的层层嵌套,还提供了规范更加容易的对异步操做进行控制。提供了reject
,resolve
,then
和catch
等方法。node
Promise是ES6以后原生的对象,咱们只须要实例化Promise对象就能够直接使用。
实例化Promise:git
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的回调。github
promise.then(function () { console.log(' resolve from promise'); }, function () { console.log(' reject from promise'); });
执行结果一:编程
begin do something run success resolve from promise
执行结果二:promise
begin do something run failed reject from 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/nodedom