1. 什么是Promise
异步编程的一种解决方案
2. Promise 的用途(可以链式调用)
主要是解决地狱回调的问题,比如需要结果请求很多个接口,这些接口的参数依赖另外一个接口返回的数据,这样的话就会一层一层的嵌套,称为回调地狱,嵌套很多层的时候代码就会让人无法理解,但是使用Promise的话就解决了这个问题。
3. 创建一个Promise:
return new Promise((resolve,reject)=>{})
4. 使用 Promise.prototype.then
在多个含有异步操作的函数之间有依赖关系时,使用这个方法能够清晰的展示依赖关系,因为then()返回的是一个新的Promise实例,所以可以采用链式写法
const promise1 = new Promise((resolve, reject) => {
resolve('Success!');
});
promise1.then((value) => {
console.log(value);
// expected output: "Success!"
});
5. 使用 Promise.all
可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
6. 使用 Promise.race
哪个快返回哪个结果,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, 'one');
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'two');
});
Promise.race([promise1, promise2]).then((value) => {
console.log(value);
// Both resolve, but promise2 is faster
});
// expected output: "two"