美文网首页
promise函数详解

promise函数详解

作者: 行心1998 | 来源:发表于2020-08-23 15:23 被阅读0次

    复制到你的vscode上看
    //promise最核心的思想:用同步的流程解决异步的操作

    //Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是 resolve 方法和 reject 方法。
    let promise =new Promise((reject,resolve)=>{

    })

    //如果异步操作成功,则用 resolve 方法将 Promise 对象的状态,从 pending 变为 resolved,并且向外传递执行成功后的数据;

    //如果异步操作失败,则用 reject 方法将 Promise 对象的状态,从 pending 变为 rejected,并且向外传递执行失败后的数据
    //promise的then方法可以接收resolve和reject传过来的数据 ;then方法有两个是回调函数的参数,分别对应resolve和reject
    return new Promise((reject,resolve)=>{

    }).then((data)=>{
    //data参数是自定义的
    console.log('resolve:'+data)
    },(err)=>{
    //err参数是自定义的
    console.log('reject:'+data)
    })
    //每个 Promise 都会提供一个 then() 函数,和一个 catch(),实际上是 then(null, ...) 函数
    // 我们可以在then()中做三件事,
    // 1. return 另一个 promise
    // 2. return 一个同步的值 (或者 undefined)
    // 3. throw 一个同步异常 throw new Eror('');

    // 为什么要有Promise函数?
    function a(param){
    setTimeout(() => {
    return '异步操作'+param
    }, 1000);
    }
    console.log(a(1))
    //这里输出的是undefined,因为执行a函数时,还没有执行return

    //可以通过回调函数实现异步输出
    function a(param,callback){
    param =param+1
    setTimeout(() => {
    param =param+1
    // return '异步操作'+param
    callback('异步操作:'+param)
    }, 1000);
    }
    console.log(a(1,function(a){
    console.log(a+' 211')
    }))
    //这里function(a){...}实际上是在settimeout中执行的。所以settimeout那个延迟了的一秒不能影响他
    //虽然回调函数可以解决这个问题,假设我们需要在异步操作1执行后,执行异步操作2;异步操作2执行后执行异步操作3,这样层层嵌套
    //那么就会陷入回调地狱,所以我们使用Promise函数解决异步执行问题。

    return new Promise((reject,resolve)=>{
    setTimeout(() => {
    resolve({a:1,b:2,c:'这是异步操作成功resovle返回的数据'})
    reject('异步操作失败1')
    }, 1000);
    }).then((data)=>{
    //data参数是自定义的
    console.log('resolve:'+data)
    },(err)=>{
    //err参数是自定义的
    console.log('reject:'+data)
    })

    相关文章

      网友评论

          本文标题:promise函数详解

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