看了不下10篇博客来理解promise,终于有了一些理解。
理解之后发现大家说得都对,只是理解起来有一些地方难度较大。
首先promise是异步编程的一种解决方案,里面存放着未来才会发生的事情的结果。为什么说它存放着未来才会结束的事情的结果呐?我们先来构造一个promise实例看一下。
let promise = new Promise(function(resolve,rejeact){
console.log('Promise');
resolve();
});
promise.then(function(){
console.log('Resolved');
});
console.log('Hi');
// Promise
// Hi
// Resolved
这行代码说明了我们在生成promise实例的时候,promise里的函数就立即执行了,也就是说我们想要的结果已经被执行完了,他已经在promise实例里面了。
我们为什么用promise,因为我们不想立即就用到这个结果,我们需要让他先执行着,我们什么时候想要什么时候直接就可以拿出来,这样就不会造成单线程阻塞。
那我们想要拿到我们的结果的时候,就要用到了reslove,reject函数,这两个函数是什么那。首先我们要明确的是:
1、promise构造函数接收一个函数作为参数
2、参数函数又有两个参数,一个是成功调用的函数:reslove,一个是失败调用的函数:reject。对于这两个函数我的理解是,他们只是传递数据的工具,并不会执行其他的功能,他们的任务就是将我们想要拿到的已经在Promise实例里的结果传递出去。
var promise = new Promise(function(resolve,reject){
// ... some code
if(/* 异步操作成功 (判断条件)*/){
resolve(value);
}else{
reject(error);
}
});
那么传到哪里那?
Promise提供了比较正规的API:
因为我们之前构造了Promise实例,实例的原型上有then方法,我们可以在实例生成后分别制定Resolved状态和Rejected状态的回调函数,这个大家应该都了解了,是promise三种状态中的两个状态,一个是成功,一个是失败。
promise.then(function(value){
// sucess
},function(error){
// failure
});
.then方法提供两个函数作为参数,分别是成功的处理函数、失败的处理函数。第二个参数可以不写。
对于图片加载,ajax的例子遍地都是,可以看一下加深理解。