js里的promise


   看到一张以前的笔记,再一看还是很容易明白。

//https://github.com/getify/You-Dont-Know-JS/blob/1ed-zh-CN/async%20%26%20performance/ch3.md   let p5=new Promise((resolve,reject)=>{reject("aa")})   //P5实际是失败的,但是这里只写了成功后要做的事,可以用catch补救 p5.then( function(a){console.log('标记1:执行成功,返回'+a)}  ).catch((er)=>{console.log('标记2:'+er);})     //应该成功失败都写一下,当然也不是绝对,主要看业务逻辑   p5.then( function(a){console.log('执行成功,返回'+a)} , function(a){console.log('执行失败,返回'+a)} ,   )        //返回的then里可以再返回promise   p5.then( function(a){console.log('执行成功,返回'+a)}, function(a){console.log('执行失败,返回'+a);return  new Promise((success,fail)=>{fail('bb')})} ).then( function(a){console.log('执行成功,返回'+a);return  new Promise((success,fail)=>{success('成功cc')})}, function(a){console.log('执行失败,111返回'+a);return  new Promise((success,fail)=>{success('失败cc')})} ).then((a)=>{console.log(`最后一次了,返回${a}`)})       --------------------------------------------------------------   function add(xPromise,yPromise) { // `Promise.all([ .. ])`接收一个Promise的数组, // 并返回一个等待它们全部完成的新Promise return Promise.all( [xPromise, yPromise] )   // 当这个Promise被解析后,我们拿起收到的`X`和`Y`的值,并把它们相加 .then( function(values){ // `values`是一个从先前被解析的Promise那里收到的消息数组 return values[0] + values[1]; } ); }      //延迟返回必须这样写 var fetchX = () => {   return new Promise((resolve, reject) => {     setTimeout(() => {       resolve(2)     }, 5000)   }) }   var fetchY=(x,y)=>{return x+y;}//直接返回可以这样写       add(fetchX(),fetchY(20,30)).then((value)=>{console.log(value)}) //2秒后打印55     ---------------------------------------------------------------------------------------   function add(xPromise,yPromise) { // `Promise.race([ .. ])`接收一个Promise的数组, // 并返回一个最先完成的新Promise 不管结果本身是成功状态还是失败状态。 return Promise.race( [xPromise, yPromise] )   // 当这个Promise被解析后 .then( function(value){    return value; } ); }       fetchX=() => {   return new Promise((resolve, reject) => {     setTimeout(() => { console.log("经过了5秒")       resolve("X")     }, 5000)   }) }   fetchY=() => {   return new Promise((resolve, reject) => {     setTimeout(() => { console.log("经过了2秒")       resolve("Y")     }, 2000)   }) }   add(fetchX(),fetchY()).then((value)=>{console.log(value)}) //2秒后打印"经过了2秒" X 再过3秒后打印"经过了5秒" catch((error)=>console.log(error))  //如果先返回的是reject   就需要catch捕获 不然会报错