最近学习中,碰到了一个叫Primise的玩意,Promise是一个构造函数(大写字母开头,构造函数的江湖规矩),可以通过以下代码:
new Promise(function(resolve,reject){
})
创建一个Promise实例。
Promise的中文意思是“许诺、允诺的东西”,在这里我认为“允诺的东西”更合适一点,这个允诺的东西在创建实例中就已经执行参数中的函数,作为参数中的函数包含了两个参数,一个是resolve,一个是reject,也即是允诺的东西分为了两种情况:一种是下决定,另一种是拒绝。
在哪里下决定或是在哪里拒绝,取决于你到底要怎样。
var a = '女神', promise = '我要山盟海誓'
new Promise(function(resolve,reject){
if(a==='女神'){
resolve(promise) //下决定
}else{
reject(promise) //拒绝
}
})
resolve和promise都可以传入参数。当允诺后,那必须要采取一些的行动,下决定的就按下决定的方法去做,拒绝就按拒绝的方法去做,这两个方法分别写在then()和catch()的括号中。
var a = '女神', promise = '我要山盟海誓'
var pro = new Promise(function(resolve,reject){
if(a==='女神'){
resolve(promise)
}else{
reject('你不是我的菜')
}
})
pro.then(function(data){
console.log(data)
}).catch(function(data){
console.log(data)
});
结果:
也就是resolve之后会执行then,reject之后会执行catch。注意到两个方法中的data,就resolve和then所传入的参数。
一个人可以对多个人许诺,聪明的人会懂得将多个许诺凑在一起实现,要凑在一起那就用到all(),举个栗子:
var p1 = new Promise(function(resolve,reject){
resolve('去泡温泉');
});
var p2 = new Promise(function(resolve,reject){
resolve('去游泳');
});
Promise.all([p1,p2]).then(function(results){
console.log(results)
})
结果是:
all()可以传入多个Primise实例组成的数组,之后集体都执行then或catch,执行方法中的参数也是一个数组。
以上是我对Promise对象的肤浅见解,在此记之。