zoukankan      html  css  js  c++  java
  • Promise实例的resolve方法

    有时需要将现有对象转为Promise对象,Promise.resolve( )方法就起到这个作用

    Promise.resolve('foo')
    // 等价于
    new Promise(resolve => resolve('foo'))

      (1) 参数是一个Promise实例

         如果参数是Promise实例,那么Promise.resolve将不做任何修改、原封不动地返回这个实例。

      (2) 参数是一个thenable对象

         thenable对象指的是具有then方法的对象,比如下面这个对象

    let thenable = {
      then: function(resolve, reject) {
        resolve(42);
      }
    };

         Promise.resolve()方法会将这个对象转为Promise对象,然后就立即执行thenable对象的then( )方法

    let thenable = {
      then: function(resolve, reject) {
        resolve(42);
      }
    };

      (3) 参数不是具有then( )方法的对象,或根本就不是对象

       如果参数是一个原始值,或者是一个不具有then( )方法的对象,则Promise.resolve( )方法返回一个新的Promise 对象,状态为resolved

    const p = Promise.resolve('Hello');
    
    p.then(function (s) {
      console.log(s)
    });
    // Hello

            上边代码生成一个新的Promise对象的实例p,由于字符串Hello不属于异步操作(判断方法是字符串对象不具有then方法), 返回 Promise 实例的状态从一生成就是resolved,所以回调函数会立即执行。Promise.resolve( )方法的参数,会同时传递给回调函数。

       (4) 不带有任何参数

     Promise.resolve( )方法允许调用时不带参数,直接返回一个resolved状态的Promise对象。

     所以,如果希望得到一个Promise对象,比较方便的方法就是直接调用Promise.resolve( )方法。

    const p = Promise.resolve();
    
    p.then(function () {
      // ...
    });

          上边代码的变量p就是一个Promise对象,需要注意的是,立即resolve( )的Promise对象,是在本轮“时间循环”event loop的结束时执行,而不是在下一轮“事件循环”的开始时。

    setTimeout(function () {
      console.log('three');
    }, 0);
    
    Promise.resolve().then(function () {
      console.log('two');
    });
    
    console.log('one');
    
    // one
    // two
    // three

         上边代码中,setTimeout(fn, 0)在下一轮“时间循环”开始时执行,Promise.resolve()在本轮“时间循环”结束时执行,console.log('one')则是立即执行,因此最先输出、

      

  • 相关阅读:
    noip模拟赛 双色球
    noip模拟赛 czy的后宫
    noip模拟赛 经营与开发
    bzoj1297 [SCOI2009]迷路
    Android(java)学习笔记140:常用的对话框
    Java基础知识强化02:import static 和 import
    Java基础知识强化01:short s = 1; s = s + 1;与short s = 1; s += 1;
    GUI编程笔记(java)11:使用Netbeans工具进行GUI编程
    GUI编程笔记(java)10:GUI实现一级菜单
    GUI编程笔记(java)09:GUI控制文本框只能输入数字字符案例
  • 原文地址:https://www.cnblogs.com/zhishiyv/p/14308106.html
Copyright © 2011-2022 走看看