美文网首页
ES6 Promise

ES6 Promise

作者: 科科Cole | 来源:发表于2021-09-01 10:43 被阅读0次

    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回调。

    相关文章

      网友评论

          本文标题:ES6 Promise

          本文链接:https://www.haomeiwen.com/subject/nphxwltx.html