Promise构造函数的静态方法

时间:2019-04-12 14:43:02

标签: javascript es6-promise

我正在检查Promise构造函数的静态方法。当我控制台记录Promise构造函数的属性时,我看到了resolve和reject方法:

console.log(Object.getOwnPropertyNames(Promise))
// Array(7) [ "all", "race", "reject", "resolve", "prototype", "length", "name" ]

我想知道这些解析和拒绝方法是否与执行程序中使用的参数相同,或者它们是分开的不同事物?

const myFirstPromise = new Promise((resolve, reject) => {
//   do something asynchronous which eventually calls either:
//
//   resolve(someValue); // fulfilled
//   or
//   reject("failure reason"); // rejected
});

规范提到了Promise Resolve Functions和Promise.resolve(x),后者是%Promise_resolve%内部对象。有人可以告诉我这些相同吗?

2 个答案:

答案 0 :(得分:3)

console.log()输出中看到的属性是全局JavaScript Promise对象的.resolve().reject()属性。您可以将它们视为Promise类的静态类方法。

它们用于创建已经解决/拒绝的新Promise对象:

const p1 = Promise.resolve(3);
console.log(await p1);
// 3

您在通话中使用的promisereject参数:

const myFirstPromise = new Promise((resolve, reject) => {
   if (rand() < 0.5) {
       resolve(3);
   } else {
       reject(new Error('not today'));
   }
});

只是函数参数。可以根据需要命名它们。它们仅在您作为参数传递给Promise构造函数的执行程序函数中可见。

它们与Promise.resolve()Promise.reject()没有任何链接或关联。

上面的代码也可以写成:

const f1 = (resolve, reject) => {
   if (rand() < 0.5) {
       resolve(3);
   } else {
       reject(new Error('not today'));
   }
};

const myFirstPromise = new Promise(f1);

通过这种方式,很清楚resolverejectmyFirstPromise或任何Promise都不相关。它们只是函数f1的局部变量。

答案 1 :(得分:0)

Promise.resolve是“获取值或承诺并将其包装在承诺中返回”的快捷方式。 myPromise = Promise.resolve("myVal")

的一种较短的方法
myPromise = new Promise((resolve) => resolve("myVal"))

Promise.reject做同样的事情,只是明显地拒绝而不是解决。