Promise.resolve()

该新特性属于 ECMAScript 2015(ES6)规范,在使用时请注意浏览器兼容性。

概述

Promise.resolve(value)方法返回一个以给定值解析后的Promise对象。但如果这个值是个thenable(即带有then方法),返回的promise会“跟随”这个thenable的对象,采用它的最终状态(指resolved/rejected/pending/settled);否则以该值为成功状态返回promise对象。

语法

Promise.resolve(value);
Promise.resolve(promise);
Promise.resolve(thenable);

参数

value
用来解析待返回promise对象的参数。既可以是一个promise对象,也可以是一个thenable。

描述

静态方法 Promise.resolve返回一个promise对象,这个promise对象是被解析后(resolved)的。

示例

使用静态方法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(true);
var cast = Promise.resolve(original);
cast.then(function(v) {
  console.log(v); // true
});

resolve thenable的对象们并抛出错误

// Resolve一个thennable对象
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) {
  // 不会被调用
});

规范

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Promise.resolve
Standard ECMA标准中的首次定义
ECMAScript 2017 Draft (ECMA-262)
Promise.resolve
Standard  

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 32 [2] 24.0 (24.0) as Future
25.0 (25.0) as Promise behind a flag[1]
29.0 (29.0) by default
未实现 19 7.1
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support 未实现 24.0 (24.0) as Future
25.0 (25.0) as Promise behind a flag[1]
29.0 (29.0) by default
未实现 未实现 iOS 8 32

[1] Chrome/v8 也支持一个非标准方法 Promise.accept()。 然而, 还是推荐使用标准的 Promise.resolve() 方法,因为 accept 方法将在未来被移除 (issue 3238)。

参见

文档标签和贡献者

 此页面的贡献者: purple_force, Zhangjd, ylc395
 最后编辑者: purple_force,