Open goldEli opened 4 years ago
Promise对象是ES6原生对象,主要用于传递异步操作的消息。 使用流程:
<script>
// 1.创建Promise对象
var promise = new Promise(function(resolve, reject){
// 使用定时器模拟ajax请求
setTimeout(function(){
resolve("success!")
}, 1000)
})
// 2.调用then方法接收响应信息 / catch方法捕获then方法的异常信息
promise.then(function(successMsg){
console.log("响应状态为resolve,将响应返回给下一个then方法调用")
return successMsg
}).then(function(msg){
console.log("接收到的响应信息=", msg);
}).catch(function(error){
console.log("捕获前两个then方法的失败信息=", error)
})
</script>
Promise 是异步编程的一种解决方案,在异步执行的时候可以把执行代码和处理结果的代码清晰地分离开,解决回调地狱的痛点
let p = new Promise((resolve, reject) => {
//做一些异步操作
setTimeout(function(){
var num = Math.ceil(Math.random()*10); //生成1-10的随机数
if(num<=5){
resolve(num);
}
else{//reject是执行失败的回调方法
reject('数字太大了');
}
}, 2000);
});
p.then((data) => {
console.log('resolved',data)
//这里有一个未经定义的变量abc
console.log(abc)
}
).catch((err) => {
console.log('rejected',err);
})
p是一个promise对象,提供了then 方法以访问其当前值、终值和据因,相当于一个自定义的回调函数 catch方法是在then中的代码出错后不会报错卡死js,会进入到catch方法中 最终输出 :
Promise {<pending>}
VM202:14 resolved 4
VM202:17 rejected ReferenceError: scsa is not defined
at <anonymous>:14:55
Promise 是用来做什么的?怎么用?附上示例代码。