Promise

 

 1.只是new了一个对象,并没有调用它,我们传进去的函数就已经执行了,这是需要注意的一个细节。所以我们用Promise的时候一般是包在一个函数中,在需要的时候去运行这个函数。

2.catch和then的第二个参数一样,用来指定reject的回调。有另外一个作用:在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中。

function getNumber(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
var num = Math.ceil(Math.random()*10); //生成1-10的随机数
if(num<=5){
resolve(num);
}
else{
reject('数字太大了');
}
}, 2000);
});
return p;
}

getNumber()
.then(function(data){
console.log('resolved');
console.log(data);
console.log(somedata); //此处的somedata未定义
},function(data){
console.log('rejected');
console.log(data);
console.log(somedata); //此处的somedata未定义})
.catch(function(reason){
console.log('rejected');
console.log(reason);
});

注意:

Promise 状态一旦改变则不能再变。
const Promise = new Promise((resolve, reject) => {
resolve('success1')
reject('error')
resolve('success2')
})
Promise
.then((res) => {
console.log('then: ', res)
})
.catch((err) => {
console.log('catch: ', err)
})
运行结果:then: success1
posted @ 2021-10-15 18:05  果果1024  阅读(34)  评论(0)    收藏  举报