原创:Promise的想象理解

我们写一个函数,只要调用此函数,并传入字符串。
就会建立并返回一个Promise类型的实例。

// 本函数实现的是返回一个promise实例,把传进来的参数字符串作为成功时候的捕获值
function doapi(string){
    let p = new Promise(
        (resolve,reject)=>{
            setTimeout(()=>{
                typeof string == 'string' && resolve(string);
            },10000)
        }
    )
    return p;
}

promise实例可以说是一个对象,把它想象成一个人,你让他内部去做事情,去成长,他可能要10秒才能成长完,也可能2秒,就是可能2-10秒。
并指定他成长完成后的回调函数。就是指定他成长完成后就会紧接着去做什么事情。
就是在promise.then( () => {//函数体});

例如

doapi('一斤龙虾')//调用函数,返回一个promise实例,这里称为第1个promise实例
 //给promise实例设置回调函数
.then(
  (a) => {
      //拿到a
      console.log( a )
  }
 )
 //以上第1个promise实例的then方法返回的是一个不用做什么异步操作的promise实例,这里称为第2个promise实例,
 //因为“不用做什么异步操作”所以第2个promise实例已经是完成状态,
 //给以上返回的这第2个promise实例指定回调函数,它不会往回调里传递参数,因为“不用做什么异步操作”
 .then(
   (a) => {
         console.log(a);//undifend
     }
 )

在浏览器控制台里可以看返回值

1.当我们调用doapi函数时候
返回一个promise实例


7236116-6052e44057f5c86e.png
image.png
7236116-33e6475f6a3fff3e.png
image.png

为了方便查看此promise对象实例的状态变化,我用变量来储存他的地址

7236116-e4793c872a1c9ded.png
image.png

promise实例调用then方法指定回调函数,then函数的返回值是一个新的建立的promise实例。这里称为第2个promise实例,这第2个promise实例默认是完成状态的,就是没有捕获值,就是说你可以给它的then里指定回调函数

7236116-684ef39c9b8b05c4.png
image.png
7236116-8cc6be937365d0e2.png
image.png
7236116-2ea9ecec12155321.png
image.png

let doapi03 = doapi('一斤龙虾')//调用函数,返回一个promise实例,这里称为第1个promise实例
 //给promise实例设置回调函数
.then(
  (a) => {
      //拿到a
      console.log( a )
      return '2斤肥牛'
  }
 )
 //返回新建立的第2个promise实例,这个promise的成功时的值为上一个then里return的值,默认是undefined,这里return的是'2斤肥牛'
 //以下给这第2个promise实例指定回调函数,这个promise实例的“成功值”会传进去回调函数里
 .then(
   (a) => {
         console.log(a);//'2斤肥牛'
     }
 )
 //返回一个第3个promise实例,其成功值是默认值undefind
 //then方法的返回值默认是一个promise对象,不过没有传出的值,就是没有捕获值,如需捕获值要手动return返回

转载于:https://www.jianshu.com/p/1b263edc9768

猜你喜欢

转载自blog.csdn.net/weixin_33912638/article/details/91204850
今日推荐