一个promise可以处于3种状态中的一种:
- pending - 初始状态。从pending状态我们可以切换到另外的状态
- fulfilled - 成功的操作
- rejected - 失败的操作
Promise 是什么
避免执行不必要的代码是一个良好的实践
reject和resolve都无法让函数剩下的部分暂停执行,所有
return reject() & return resolve() 都是必须的
Promise主要是对回调嵌套的一种优化方案
Promise里面的resolve或者reject的调用,会将当前这个Promise置于一种状态
不管调用什么,都表示这个Promise已经结束了
按我自己的理解说一下promise,
就是你执行一个函数,如果他执行成功了,他就执行resolve函数,如果失败了就执行reject函数。
new Promise()Promise.resolve(100)new Promise(resolve => resolve(100))Promise.reject('error')new Promise((resolve, reject) => reject('error'))
//方式1, 返回的promise状态是peddingreturn new Promise((resolve,reject)=>{});//方式2, 返回的promise状态是resolvereturn new Promise((resolve,reject)=>{return resolve(res.data);//或者//reject(res.data.err);});return new Promise((resolve,reject)=>{fetch(config).then(res=>{return resolve(res.data);}).catch(error=>{return reject(error);});});Promise.resolve('foo');//等价于如下new Promise((resolve)=>{resolve('foo');})
Promise.all
Promise.all([])Promise.all('123')
Promise.race
Promise.race()Promise.race(123)
解决多个异步嵌套
Promise + Async 解决多个异步嵌套
function plus (str, wait) {return new Promise((resolve, reject) => {setTimeout(() => {resolve(str)}, wait)})}async function showStr () {let a = await plus('hello', 10)let b = await plus('m', 10)let c = await plus('j', 10)console.log(a + b + c)}showStr()// async 解决setTimeout嵌套回调setTimeout(() => {var a = 'hello'setTimeout(() => {var b = 'm'setTimeout(() => {var c = 'j'console.log( a + b + c)}, 10)}, 10)}, 10)
