<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<script>
var promise = new Promise(
(resolve, reject) => {
console.log('promise');
var num = Math.random()*5;
setTimeout(() => {
//自己判断代码返回,小于2我认为成功。既调用resolve,也就是我认为ajax成功了 Resolved
if(num < 2) resolve(num);
//同理,我认为失败了调用reject,Promise对象的状态会变成Rejected
else reject(num)
}, 1000);
}
);
promise.then(function(n){
console.log(`成功了${n}`);
//同时可以return数据提供给下一个return使用
return n;
},function(n){
console.log(`失败了${n}`);
//关于return 如果return上一个的数据,下一个then就会接受上一个的数据
//如果return一个new Promise 既又会在执行一遍异步在进行一次判断
//如果什么都不写,既相当于得到上一个已经获得了的Promise的实例
return n;
}).then(function(n){
console.log(`失败了${n}`);
},function(n){
console.log(`成功了${n}`);
});
//promise对象,也就是说将new Promise()时候传入一个function 这个function接受两个参数 一个resolve成功时候回调,一个是rejuct失败拒绝时候的回调
//即在new Promis()中传入的function中我们写入ajax等异步请求,当异步请求执行完成之后,我们可以根据异步请求返回的结果。通过去判断成功还是失败,如果失败执行rejuct,成功执行resolve
//then传入两个参数,第一个带表成功时候的回调。第二个代表失败时候的回调。
//以及关于resolve和rejuct的参数,需要我们自己手动在调用时候传入。比如相应成功获得了一个jsonp为text,就需要在resolve(text)。这样在使用then中第一个函数,我们也可以接收一个text的jsonp。
</script>
</body>
</html>
承诺必须完成(返回一个值)或者必须被拒绝(返回一个原因)。承诺完成或被拒绝时(无论哪一个先发生),Promise 对象的 then 方法都会运行。如果承诺成功完成,则将运行 then 方法的履行处理程序函数。如果承诺被拒绝,则将运行 then 方法(或 catch 方法)的错误处理程序函数。
换句话说承诺完成也就是我们在异步操作中调用resolve或者reject任意一个都标志着承诺完成,既根据调用的不同执行then中的不同参数。