一个promise可以处于3种状态中的一种:

  • pending - 初始状态。从pending状态我们可以切换到另外的状态
  • fulfilled - 成功的操作
  • rejected - 失败的操作

Promise 是什么

避免执行不必要的代码是一个良好的实践
reject和resolve都无法让函数剩下的部分暂停执行,所有
return reject() & return resolve() 都是必须的

Promise主要是对回调嵌套的一种优化方案
Promise里面的resolve或者reject的调用,会将当前这个Promise置于一种状态
不管调用什么,都表示这个Promise已经结束了
按我自己的理解说一下promise,
就是你执行一个函数,如果他执行成功了,他就执行resolve函数,如果失败了就执行reject函数。

  1. new Promise()
  2. Promise.resolve(100)
  3. new Promise(resolve => resolve(100))
  4. Promise.reject('error')
  5. new Promise((resolve, reject) => reject('error'))
  1. //方式1, 返回的promise状态是pedding
  2. return new Promise((resolve,reject)=>{});
  3. //方式2, 返回的promise状态是resolve
  4. return new Promise((resolve,reject)=>{
  5. return resolve(res.data);
  6. //或者
  7. //reject(res.data.err);
  8. });
  9. return new Promise((resolve,reject)=>{
  10. fetch(config).then(res=>{
  11. return resolve(res.data);
  12. }).catch(error=>{
  13. return reject(error);
  14. });
  15. });
  16. Promise.resolve('foo');
  17. //等价于如下
  18. new Promise((resolve)=>{
  19. resolve('foo');
  20. })

Promise.all

  1. Promise.all([])
  2. Promise.all('123')

Promise.race

  1. Promise.race()
  2. Promise.race(123)

解决多个异步嵌套

Promise + Async 解决多个异步嵌套

  1. function plus (str, wait) {
  2. return new Promise((resolve, reject) => {
  3. setTimeout(() => {
  4. resolve(str)
  5. }, wait)
  6. })
  7. }
  8. async function showStr () {
  9. let a = await plus('hello', 10)
  10. let b = await plus('m', 10)
  11. let c = await plus('j', 10)
  12. console.log(a + b + c)
  13. }
  14. showStr()
  15. // async 解决setTimeout嵌套回调
  16. setTimeout(() => {
  17. var a = 'hello'
  18. setTimeout(() => {
  19. var b = 'm'
  20. setTimeout(() => {
  21. var c = 'j'
  22. console.log( a + b + c)
  23. }, 10)
  24. }, 10)
  25. }, 10)