promise语法结构
创建一个promise对象
let p = new Promise(function(resolve,reject){// 执行的操作...// 判断操作的结果并执行对应的回调函数if(){resolve()}else{reject()}
}
以上实例化了一个promise对象,其中包含了一个参数function,这个函数会在p实例化时立刻执行,这是同步的,它有两个参数回调resolve和reject (关于回调函数可以参考---js回调函数callback),分别表示操作成功和操作失败两种状态,它们同属于执行完成的状态。
promise
对象具有以下内部属性:
state
—— 最初是"pending"(待执行)
,然后在resolve
被调用时变为"fulfilled"(成功执行)
,或者在reject
被调用时变为"rejected"(失败执行)
。result
—— 最初是undefined
,然后在resolve(value)
被调用时变为value
,或者在reject(error)
被调用时变为error
。
这两个内部属性不可被直接修改,属于私有量。
同时它还有拥有2个实例化方法,then()和catch(),
then()
// 异步返回结果
p.then(()=>{// p成功执行console.log("success",p);
},()=>{// p失败执行console.log("fail",p);
})
第一个回调是成功时执行,第二个回调是失败时执行,
catch()
// 异步返回结果
p.catch(()=>{// p失败执行console.log("fail",p);
})
只有一个回调捕获失败的情况执行,catch(f) 与 then(null, f) 一样
、
两种方法均在promise被设置,且状态是被执行 才会触发,这是异步的
一个promise的实例
function getData(b) { if(b){return true;}else{return false;}
}
let p = new Promise(function(resolve,reject){//执行一个操作let data;setTimeout(()=>{console.log("promise执行中...");data = getData(1);if(data){// 是否拿到数据resolve("成功") // 成功,返回成功信号}else{reject("失败") // 失败,返回失败信号}},1000);
});
// 异步返回结果
p.then(()=>{// p成功执行console.log("success",p);
},()=>{// p失败执行console.log("fail",p);
})console.log("模拟获取数据...");
得到结果如下
小结
promise是一个对象,它包含了一个操作和这个操作的执行状态,它可以根据操作的执行状态(成功和失败)执行对应的方法,而这个过程是异步的,它会等待操作的执行返回结果