引用:https://es6.ruanyifeng.com/#docs/promise
new Promise((resolve,reject)=>{
var number = Math.random();
if (number > 0.5){
resolve("login success resolve")
}else{
reject("login fail reject")
}
}).then(data=>{
console.log("login",data)
return new Promise((resolve,reject)=>{
var number = Math.random();
if (number > 0.5){
resolve("getinfo success")
}else{
reject("getInfo reject")
}
})
}).then(data=>{
console.log("getInfo",data)
}).catch(err=>{
console.error("error"+err)
})
function login(resolve,reject){
setTimeout(function () {
var number = Math.random();
if (number > 0.5){
resolve("getinfo success")
}else{
reject("getInfo reject")
}
},1000)
}
new Promise(login).then(success=>{
console.log(success)
/**
* 1. 返回promise
* 2. 返回字符串,,可以一直 then下去,,, 返回的值,作为下一个then的参数
* 3. then方法中抛出异常
*/
return "hehe"
},err=>{
console.error(err)
return "err";
}).then(data=>{
throw new Error("出错了")
}).catch(err=>{
console.log("error : "+err)
})
进入catch 代码块:
finally
new Promise(login).then(success=>{
console.log(success)
/**
* 1. 返回promise
* 2. 返回字符串,,可以一直 then下去,,, 返回的值,作为下一个then的参数
* 3. then方法中抛出异常
*/
return "hehe"
},err=>{
console.error(err)
return "err";
}).then(data=>{
throw new Error("出错了")
}).catch(err=>{
console.log("error : "+err)
}).finally(()=>{
console.log("finally :")
return new Promise(login)
}).then(()=>{
console.log("===========")
}).catch((err)=>{
console.log("================",err)
})
静态方法:
var p1 = Promise.resolve("hello promise");
p1.then(data=>{
// 不会进入 err ,你声明的是 resolve, 除非在 then中 抛出异常
console.log("data : ",data)
}).catch(err=>{
})
var p2 = Promise.reject("error reason");
// 接受多个Promise对象,,只返回一个Promise实例,,等所有的 Promise对象都执行成功完毕,才会进入到then中,
// 只要有一个 reject 的, 进入 reject
// 保证多个异步任务同时成功
Promise.all([new Promise(login),new Promise(login)]).then(data=>{
console.log(data)
}).catch(error=>{
console.log(error)
})
// 接受多个Promise,一旦Promise, resolve 或者 reject 就结束
// 你要请求数据从多个地方拿到,你也不确定,哪个服务是好的,拿到的快
Promise.race([new Promise(login),99]).then(data=>{
console.log(data)
}).catch(error=>{
})