ES6 Promise

2021-09-01  本文已影响0人  科科Cole

ES6中的Promise可以用来执行一个异步方法。当我们需要使用Promise时,我们会新建一个Promise对象:new Promise((resolve,reject)=>{})。Promise的构造函数接收一个函数为参数,这个函数的参数为两个函数resolve和reject,用于改变Promise对象状态。
当我们新建一个Promise对象时,Promise构造函数的参数实际上是立即执行的,只有then方法和catch方法的回调函数才会异步执行。因此对于下面一段代码:

console.log(1);
let a = new Promise((resolve,reject)=>{
    console.log(2);
    resolve();
})
a.then(()=>{
    console.log(3);
})
console.log(4);

控制台输出顺序应该是1 2 4 3,因为Promise构造函数参数是立即执行的,所以会先执行console.log(2),而then方法是异步的,所以最后才执行console.log(3)
另外我们知道,当一个Promise对象状态从pending变为fulfilledrejected后,任何操作都无法改变该Promise状态。但是对于Promise构造函数参数,执行resolve()或reject()后,之后的语句还是会接着执行的,只是之后Promise的状态不会再改变,因此对于下面的代码:

console.log(1);
let a = new Promise((resolve,reject)=>{
    console.log(2);
    resolve();
    console.log(3);
    reject();
})
a.then(()=>{
    console.log(4);
})
a.catch(()=>{
    console.log(5);
})
console.log(6);

控制台输出应该是1 2 3 6 4。当执行resolve()之后,console.log(3)还会执行,此时Promise状态已经变为fulfilled,之后再执行reject()不会改变Promise状态,因此只会执行then回调,不会执行catch回调。

上一篇下一篇

猜你喜欢

热点阅读