<script>
let p = new Promise(function (resolve, reject) {
// resolve("包包");// 调用resolve可以传递一个终值 成功的结果
// reject("没钱"); //
});
console.log(p)
script>
<script>
let p = new Promise(function (resolve, reject) {
// resolve("包包"); // 处于等待的promise对象,转成成功状态
reject("没钱"); // 处于等待的promise对象,转成失败状态
});
// console.log(p)
p.then(value=> {
console.log(value); // value就表示终值
},reason=> {
console.log(reason);
})
script>
let p1 = new Promise((resolve,reject)=>{
resolve("包包")
})
// then是一个方法 是一个方法 就有一个返回值
// then又返回一个新的promise p2就是一个新的promise
// p2默认也是处理等待状态
let p2 = p1.then(value => {
console.log(value)
}, reason => {
console.log(reason)
} )
eg:
let p1 = new Promise((resolve,reject)=>{
// 执行器 执行器通常放异步代码
setTimeout(()=>{
resolve("包包")
},2000)
})
let p2 = p1.then(value => {
console.log(value)
},reason => {
console.log(reason)
})
p2.then(value => {
// p2成功就会走此函数 value代表终值
console.log(value) // undefined
},reason => {
console.log(reason)
})
let p = Promise.reject("没钱"); // 创建一个失败的promise
/*p.then(value=>{
console.log(value)
},reason => {
console.log(reason)
}) */// 由于p直接就是一个成功的promise,then中的两个方法,只需要写第1个就OK了
// 写个null表示没有此函数
p.then(null,reason => {
console.log(reason)
})
let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("包包")
},2000)
})
// Promise.resolve(110); 直接创建出一个成功的Promsie
// 2)如果p1.then中的方法中返回了一个新的promise,p2是成功还是失败,就要看这个新的promise是成功不是失败
// Promise.resolve(110) 成功 ===> p2就是成功 终值是:110
let p2 = p1.then(value => { // p2就变成成功的promse
console.log(value)
return Promise.resolve(110);
},reason => {
console.log(reason)
})
p2.then(value => {
console.log(value) // 看上一个then中的方法的返回值 und
},reason => {
console.log(reason)
})
new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(10)
},2000)
}).then(value => {
console.log(value) // 10
return value * n; // 报错了,会走下一个then的第2个函数
},reason => {
console.log(reason)
return Promise.reject(666);
}).then(value => {
console.log(value)
},reason => {
console.log(reason); // n is not defined
return reason * 10; // return NaN 没有报错
}).then(value => {
console.log(value) // NaN
return Promise.reject(value * 100)
},reason => {
console.log(reason)
}).then(value=>{
},reason => {
console.log(reason)
})
let p1 = new Promise((resolve,reject)=>{
resolve("包包")
})
/*p1.then(value => {
console.log(value)
return Promise.reject(4444)
}).then(null,reason => {
console.log(reason)
})*/
p1.then(value => { // catch就是.then(null,reason=>{})的语法糖
console.log(value)
return Promise.reject(4444)
}).catch(reason => { // 在catch中捕获失败的结果
console.log(reason)
})
let p1 = new Promise((resolve,reject)=>{ // 执行器是立即执行
// 执行器中放异步代码
setTimeout(()=>{
resolve("包包")
},3000)
})
async function fn() {
// await返回值是成功的结果
let value = await p1; // await后面跟promise 要使用await 对应的函数必须是async函数
console.log(value)
}
fn();
async function fn() {
// await返回值是成功的结果 失败的结果需要通过try catch来获取
try{
let value = await p1;
console.log(value)
}catch (reason) { // 失败的结果,需要在catch中捕获
console.log(reason)
}
}
fn();