// Promise.resolve('1')
// .then(res => {
// console.log(res)
// })
// .finally(() => {
// console.log('finally')
// })
// Promise.resolve('2')
// .finally(() => {
// console.log('finally2')
// return '我是finally2返回的值'
// })
// .then(res => {
// console.log('finally2后面的then函数', res)
// })
// Promise.resolve('1')
// .finally(() => {
// console.log('finally1')
// return new Error('我是finally中抛出的异常')
// })
// .then(res => {
// console.log('finally后面的then函数', res)
// })
// .catch(err => {
// console.log('捕获错误', err)
// })
// function promise1 () {
// let p = new Promise((resolve) => {
// console.log('promise1');
// resolve('1')
// })
// return p;
// }
// function promise2 () {
// return new Promise((resolve, reject) => {
// reject('error')
// })
// }
// promise1()
// .then(res => console.log(res))
// .catch(err => console.log(err))
// .then(() => console.log('finally1'))
// promise2()
// .then(res => console.log(res))
// .catch(err => console.log(err))
// .then(() => console.log('finally2'))
// async function async1() {
// console.log("async1 start");
// await async2();
// console.log("async1 end");
// }
// async function async2() {
// console.log("async2");
// }
// async1();
// console.log('start')
function runAsync (x) {
const p = new Promise(r => setTimeout(() => r(x, console.log(x)), 1000))
return p
}
// function yes(x){
// const p = new Promise((res,rej)=>{
// setTimeout(()=>{
// res()
// },1000)
// })
// return p
// }
function runReject (x) {
const p = new Promise((res, rej) => setTimeout(() => rej(`Error: ${x}`, console.log(x)), 1000 * x))
return p
}
// function no(x){
// const p = new Promise((res,rej)=>{
// setTimeout(()=>{
// rej(`Error: ${x}`, console.log(x))
// },1000 * x)
// })
// return p
// }
Promise.all([runAsync(1), runReject(4), runAsync(3), runReject(2)].map(p=>p.catch(e=>false)))
.then(res => console.log(res))
.catch(err => console.log(err))
// runReject(6)
// .then(res=>console.log(res),rej=>console.log(rej))
// no(1)
// .then(res=>console.log(res),rej=>console.log(rej))
// const a = new Promise((res,rej)=>{
// res('xxx',console.log('aaa'))
// })
// a.then(res=>{return Promise.resolve(2)},rej=>{console.log(rej)})
// .then(res=>{console.log(res)},rej=>{return Promise.reject(3)})
// .then(res=>{console.log(res)},rej=>{console.log(rej)})
// var p1 = Promise.resolve(42)
// p1.then((value) => {
// //第一种情况,返回一个Promise
// return new Promise(function (resolve, rejected) {
// setTimeout(function () {
// resolve(value + 1)
// }, 3000)
// })
// .then((value) => {
// return Promise.resolve(value + 1)
// })
// })
// .then((value) => {
// console.log(value)
// })
// Promise.resolve(1)
// .then(res => {
// console.log(res);
// // return 2;
// throw 'error message';
// })
// .then(res => {
// console.log(res);
// })
// // .catch(error=>console.log(error))
// .catch(error => console.log(error));
// 在Promise中,返回任意一个非 promise 的值都会被包裹成 promise 对象,例如return 2会被包装为return Promise.resolve(2)。
// scrst asy1st asy2 asy1end
//
//
//
// 紧跟着await后面的语句相当于放到了new Promise中,
//下一行及之后的语句相当于放在Promise.then中
// 微任务包括:MutationObserver、
//Promise.then()或catch()、Promise为基础开发的其它技术,
//比如fetch API、V8的垃圾回收过程、Node独有的process.nextTick。
// 宏任务包括:script 、setTimeout、setInterval 、setImmediate
//、I/O 、UI rendering。
// .then .catch里面没有抛出异常 p.then p.catch 返回的值就是fulfilled状态的Promise
// ,反之就是rejected状态的Promise
//return 2会被包装成resolve(2)。
//返回任意一个非 promise 的值都会被包裹成 promise 对象,
//因此这里的return new Error('error!!!')也被包裹成了
//return Promise.resolve(new Error('error!!!'))。
// .then 或者 .catch 的参数期望是函数,传入非函数则会发生值透传。
// Promise.resolve(1)
// .then(2)
// .then(Promise.resolve(3))
// .then(console.log)
const a= [1,2,3]
a.forEach(p=> {return p+=1})
console.log(a)
console