阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JS Promise.resolve()

      Promise.resolve(value)方法返回一个以给定值解析后的Promise 对象。如果该值为promise,返回这个promise;如果这个值是thenable(即带有"then" 方法)),返回的promise会“跟随”这个thenable的对象,采用它的最终状态;否则返回的promise将以此值完成。此函数将类promise对象的多层嵌套展平。

      警告:不要在解析为自身的thenable 上调用Promise.resolve。这将导致无限递归,因为它试图展平无限嵌套的promise。一个例子是将它与Angular中的异步管道一起使用。在此处了解更多信息。

      The source for this interactive demo is stored in a GitHub repository. If you’d like to contribute to the interactive demo project, please clone https://github.com/mdn/interactive-examples and send us a pull request.

      语法

      Promise.resolve(value);
      
      

      参数

      value

      将被Promise对象解析的参数。也可以是一个Promise对象,或者是一个thenable。

      返回值

      返回一个解析过带着给定值的Promise对象,如果返回值是一个promise对象,则直接返回这个Promise对象。

      描述

      静态方法 Promise.resolve返回一个解析过的Promise对象。

      示例

      使用静态Promise.resolve方法

      Promise.resolve("Success").then(function(value) {
        console.log(value); // "Success"
      }, function(value) {
        // 不会被调用
      });
      
      

      resolve一个数组

      var p = Promise.resolve([1,2,3]);
      p.then(function(v) {
        console.log(v[0]); // 1
      });
      
      

      Resolve另一个promise

      var original = Promise.resolve(33);
      var cast = Promise.resolve(original);
      cast.then(function(value) {
        console.log('value: ' + value);
      });
      console.log('original === cast ? ' + (original === cast));
      
      /*
      *  打印顺序如下,这里有一个同步异步先后执行的区别
      *  original === cast ? true
      *  value: 33
      */
      

      日志顺序颠倒其实是由于异步地调用then 方法。在这里查看then 是如何工作的。

      resolve thenable 并抛出错误

      // Resolve一个thenable对象
      var p1 = Promise.resolve({ 
        then: function(onFulfill, onReject) { onFulfill("fulfilled!"); }
      });
      console.log(p1 instanceof Promise) // true, 这是一个Promise对象
      
      p1.then(function(v) {
          console.log(v); // 输出"fulfilled!"
        }, function(e) {
          // 不会被调用
      });
      
      // Thenable在callback之前抛出异常
      // Promise rejects
      var thenable = { then: function(resolve) {
        throw new TypeError("Throwing");
        resolve("Resolving");
      }};
      
      var p2 = Promise.resolve(thenable);
      p2.then(function(v) {
        // 不会被调用
      }, function(e) {
        console.log(e); // TypeError: Throwing
      });
      
      // Thenable在callback之后抛出异常
      // Promise resolves
      var thenable = { then: function(resolve) {
        resolve("Resolving");
        throw new TypeError("Throwing");
      }};
      
      var p3 = Promise.resolve(thenable);
      p3.then(function(v) {
        console.log(v); // 输出"Resolving"
      }, function(e) {
        // 不会被调用
      });
      
      

      规范

      SpecificationStatusComment
      ECMAScript 2015 (6th Edition, ECMA-262)Promise.resolveStandardECMA标准中的首次定义
      ECMAScript Latest Draft (ECMA-262)Promise.resolveStandard

      参见

      目录
      目录