es6中的Promise

35次阅读

共计 1063 个字符,预计需要花费 3 分钟才能阅读完成。

Promise 是异步编程的一种解决方案, 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

promise 的语法细节

ES6 规定,Promise 对象是一个构造函数,用来生成 Promise 实例

  • Promise 接收的是一个函数(回调函数)
  • 回调函数由两个参数,这个参数(reslove,reject)分别都是函数
  • new Promise 生成的是一个 promise 实例,该实例拥有 then 方法
  • then 方法接收两个函数,第一个函数跟 reslove 相关,第二个函数和 reject 相关,reslove 执行就会触发 then 里的第一个函数执行,并且会把 reslove 接收的参数传递给 then 里的第一个函数
  • reslove 和 reject 只有一个会执行
  • Promise 有三种状态 pending(执行中)/resloved(异步代码成功执行)/rejected(异步代码执行失败)
let p = new Promise((reslove, reject) => {setTimeout(() => {reject('hello');
    }, 2000);
});
p.then((data) => {console.log(data);
}, (data) => {console.log('data', data);
})

如何应用 promise:

  • 在 promise 的回调里,书写异步代码,在异步成功的时候去调用 reslove,在异步失败的时候去调用 reject;

promise 主要用来解决异步的问题

链式调用

  • 方便代码的组织
  • 避免回调地狱
// Promise 回调嵌套
// move(200,0).then(()=>{//     move(200,200).then(()=>{//         move(0,0)
//     })
// })

Promise 链式调用
move(200,0).then(()=>{return move(200,200);
}).then(()=>{return move(0,0)
})

Promise 类的静态方法 all() race()

  • Promise.all 接受的参数是数组,数组中的 promise 对象都 resloved,Promise.all 返回的新 promise 才会是 resloved 状态的,只要数组中有一个 promise 对象是 rejected 状态,
  • Promise.all 适用的场景是多个异步条件需要同时满足才执行后续操作的情况。
  • Promise.race() 接受的参数也是个数组,数组中的 promise 对象存在竞争关系,比如同时向两个不同接口拿相同数据,哪个接口先返回数据,就先使用该数据做后续操作

正文完
 0