Promise
(1)对象的状态不受外界影响。Promise
对象代表一个异步操作,有三种状态:pending
(进行中)、fulfilled
(已成功)和rejected
(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise
这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。
(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise
对象的状态改变,只有两种可能:从pending
变为fulfilled
和从pending
变为rejected
。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise
对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="./jquery-3.1.0.js"></script> </head> <body> <script> let p = new Promise(function(resolve,reject){ $.ajax({ url:"data/arr.txt", dataType:"json", success(arr){ resolve(arr) },error(err){ reject(err) } }) }); let p2 = new Promise(function(resolve,reject){ $.ajax({ url:"data/json.txt", dataType:"json", success(arr){ resolve(arr) },error(err){ reject(err) } }) }); Promise.all([ p,p2 ]).then(function(val){ //结构赋值 let [arr1,arr2]=val; console.log(arr1) console.log(arr2) }) </script> </body> </html>
// new 做了什么
//1.创建一个新的空对象
//2.将构造函数中的this指向这个新空对象
//3.执行构造函数中的代码
//4.返回这个对象
//5.这个对象有一个__proto__指向构造函数原型
var promise= new Promise((resolve, reject) => {
var flag=1;
if(flag) return resolve()
reject()
});
promise.then((res)=>{
var a = "成功回调"
console.log(a)
},(err)=>{
var b = "失败回调"
console.log(b)
})
// ---------------------------------
function promiseTest(){
var promise= new Promise((resolve,reject)=>{
var flag=true;
if(flag) return resolve()
reject()
});
return promise
};
promiseTest().then((res)=>{
var a = "成功回调"
console.log(a)
},(err)=>{
var b ="失败回调"
console.log(b)
})
//---------------------------
## Promise
1.Promise是一个构造函数
+ 需要new Promise去创建一个Promise对象
+ 在new Promise(函数) 这个函数有2个参数一个是resolve(成功的回调)
一个是reject(失败的回调)
2.promise对象上有then()同时还有一个叫 catch方法
+ then接受2参数一个是成功的回调一个是失败的回调
+在then接受中的分别传递成功和失败回调函数给resolve和reject
3.为什么要使用Promise
+解决嵌套地狱问题
4.Promise会立即执行
Sometimes you need to applaud yourself