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捕获 不然会报错
//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捕获 不然会报错