同步与异步

js是单线程语言,单线程就是一次只能实现一个工作。
如果有多个工作就须要排队,如果一个工作排队事件太长,就会导致阻塞。
这个时候就须要异步操作

同步即阻塞,异步即非阻塞

异步能够不是程序执行,异步工作有一个或多个回调函数。
比拟常见的异步有setTimeOut和setInterVal,他们能够扭转工作执行程序

什么是promise

Promise对象用于示意一个异步操作的最终实现(或失败)及其后果值

一个Promise必然处于一下三种状态之一:

待定(pending):初始状态,既没有被兑现,也没有被回绝

已兑现(fulfilled):意味着操作兑现实现

已回绝(rejected): 意味着操作失败

promise的应用

链式调用

咱们能够用promise.then(),promise.catch()和promise.finally()这些办法将进一步的操作与一个变为已敲定状态的promise关联起来。

这些办法还会返回一个新生成的promise对象,这个对象能够被非强制性的用来做链式调用

const promiseA = new Promise((resolut,reject)=>{  resolut(777)});setTimeout(() => {  console.log(promiseB,'promiseB');}, 1000);promiseA.then(resolut => {  console.log(resolut,'resolut1');  return 111}).then(resolut => {  console.log(resolut,'resolut2');  return 222}).then(resolut => {  console.log(resolut,'resolut3');  throw new Error('error')}).catch(()=>{  console.log('promiseA失败');})后果// 777 'resolut1'// 111 'resolut2'// 222 'resolut3'// promiseB失败
静态方法
Promise.all(iterable)

这个办法会返回一个新的Promise对象,常被用来解决多个Promise对象的状态汇合。该promise对象在iterable参数对象里所有的promise都胜利的时候才会触发胜利,一旦有任何一个promise对象失败则立刻触发失败。

Promise.allSettled(iterable)

等到所有promises都已敲定(settled)(每个promise都已兑现(fulfilled)或已回绝(rejected))。
返回一个promise,该promise在所有promise实现后实现。并带有一个对象数组,每个对象对应每个promise的后果。

Promise.any(iterable)

接管一个Promise对象的汇合,当其中的一个 promise 胜利,就返回那个胜利的promise的值。

Promise.race(iterable)

接管一个Promise对象的汇合,当其中的一个 promise 胜利或者失败,就返回那个的promise的值。

  const promiseA = new Promise((resolut,reject)=>{    resolut(777)  });  const promiseB = new Promise((resolut,reject)=>{    resolut(888)  });  const promiseC = new Promise((resolut,reject)=>{    resolut(999)  });  Promise.all([promiseA,promiseB,promiseC]).then(res =>{    console.log(res);  })  // [777, 888, 999]  Promise.allSettled([promiseA,promiseB,promiseC]).then(res =>{    console.log(res);  })  <!-- [    {        "status": "fulfilled",        "value": 777    },    {        "status": "fulfilled",        "value": 888    },    {        "status": "fulfilled",        "value": 999    }  ] -->  Promise.any([promiseA,promiseB,promiseC]).then(res =>{    console.log(res);  })  // 777  Promise.race([promiseA,promiseB,promiseC]).then(res =>{    console.log(res);  })  // 777

参考:

https://zhuanlan.zhihu.com/p/...

https://developer.mozilla.org...