SOURCE

// 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 命令行工具 X clear

                    
>
console