Promise 是一个对象,从它可以获取异步操作的消息,是一种操作异步编程的解决方案。
一般我们会在Promise里面写一些不一定马上完成的异步方法,比如ajax获取数据,而Promise能提供两个回调函数:resolve, reject,在获取到数据之后可以根据需要触发其中一个回调函数, 下面是自己写的一个demo便于理解
用setTimeout来模拟异步获取数据,如果获取到了数据,触发recolve,并将取得的数据作为参数,否则触发reject。Promise还有几个特点:
- 无法取消 Promise ,一旦新建(new)它就会立即执行,无法中途取消。
- 如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。
- 处于 pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
- 在 JavaScript 主线程的当前运行完成之前,回调函数(then和catch)永远不会被调用。
const p = new Promise((resolve,reject)=>{
// some code
var data;
setTimeout(function(){
data = '从axios获取的数据';
if(data){
resolve(data);
}
else{
reject('error error!')
}
},2000);
})
p.then(res=>{
// res就是data
console.log(res ,'请求成功') //从axios获取的数据,请求成功
return res;
}).then(res=>{
res = res + ',再进行处理后的数据'
console.log(res); //从axios获取的数据,再进行处理后的数据
}).catch(err=>{
// err就是'error error!'
console.log(err);
})
for(i=0;i<10000;i++){
}
console.log('先执行同步代码')
总结:创造一个Promise对象,在里面执行一个异步任务,根据异步任务的结果,自定义回调函数resolve或reject, 并用then或catch调用。