1.什么是promise?运用promise有什么上风?
promise是异步编程的一种处理方案,上风是能够防止层层嵌套的回调。
2.发生背景:
在promise涌现之前,你一定写过如许的代码:
$.ajax({
url1: '......',
success: function (data1) {
$.ajax({
url2: '......',
success: function (data2) {
... //data2的某些操纵依赖于data1
}
});
}
});
上述代码中,假如另有data3依赖于data2,那末上述代码将会存在更深条理的嵌套,promise的涌现就是处理这些嵌套带来的不文雅和低可读性等题目。
3.promise运用引见
promise是一个对象,从这个对象中我们能够猎取异步操纵的效果。
promise代表一个异步操纵,有三种状况:
Pending(进行中)、Resolved(已完成,又称 Fulfilled)和Rejected(已失利)。
建立一个promise:
var promise = new Promise(function(resolve,reject){
...some code, such as http request
if(success){
resolve(data); //异步要求胜利时,经由过程resolve向外通报效果
} else {
reject(error); //异步要求失利时,经由过程reject向外通报效果
}
});
简朴运用案例:
var MongoClient = require('mongodb').MongoClient;
var getData = function(url){
var promise = new Promise(function(resolve,reject){
MongoClient.connect(url, function(err, db){
if(db){
var collection = db.collection('users');
collection.find({}).toArray(function(err,docs){
resolve(docs);
});
}
if(err){
reject(err);
}
});
});
return promise;
}
getData('mongodb://localhost:27017/zuckjet').then(function(data){
console.log(data);
},function(err){
console.log(err);
});
上述代码中,起首建立了一个函数getData,该函数返回一个promise实例。在该promise实例中,实行的异步操纵代码是接见当地mongodb数据库数据。当要求数据胜利时,经由过程resolve对外通报要求效果。当要求失利时,经由过程reject对外通报错误信息。
promise.then()吸收两个回调函数作为参数,第一个回调函数吸收的是要求胜利时的数据,即上述代码中resolve(docs)中的doc,第二个回调函数吸收的是要求失利时的信息,即上述代码中reject(err)中的err。