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