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)=>{
    // 最终需要调用`resolve(..)`或`reject(..)`
    // 它们是这个promise的解析回调
    if (1==0){
        resolve(     "a1" );
    }else{
        reject(     "a2" );
    }
})
 
//这里P5实际是失败的,但是这里只写了成功后要做的事,可以用catch补救
p5.then(
function (arg){console.log(     '标记1:执行成功,返回' +arg)}
).     catch ((er)=>{console.log(     '标记2:' +er);})
 
 
//应该成功失败都写一下,当然也不是绝对,主要看业务逻辑
p5.then(
function (arg){console.log(     '执行成功,返回' +arg)} ,     /*普通函数*/
(er)=>{console.log(     '执行失败,返回' +er)} ,     /*箭头函数*/
 
)

//返回的then里可以再返回promise
p5.then(
function (arg){console.log(     '执行成功,返回' +arg)},
function (arg){console.log(     '执行失败,返回' +arg);return new Promise((success,fail)=>{fail(     'bb' )})}
).then(
function (a){console.log(     '执行成功2,返回' +a);     return new Promise((success,fail)=>{success(     '成功cc' )})},
function (a){console.log(     '执行失败2,返回' +a);     return new Promise((success,fail)=>{success(     '失败cc' )})}
).then((a)=>{console.log(`最后一次了,返回${a}`)})
 

//------------------Promise.all说明--------------------------------------------
 
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)})      //5秒后打印52
 
 
//------------------Promise.race说明--------------------------------------------
 
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秒"Y, 再过3秒后打印"经过了5秒"    注意: 没有返回 X
catch ((error)=>console.log(error))       //如果先返回的是reject   就需要catch捕获 不然会报错

 

posted @ 2022-06-27 16:27  wsh3166Sir  阅读(21)  评论(0编辑  收藏  举报