为了账号安全,请及时绑定邮箱和手机立即绑定

Promise构造函数的静态方法

Promise构造函数的静态方法

千万里不及你 2021-04-19 09:18:18
我正在检查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 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

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


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


const p1 = Promise.resolve(3);

console.log(await p1);

// 3

该promise和reject你在调用中使用的参数:


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);

这样更清楚,resolve并且reject不涉及myFirstPromise或任何Promise以任何方式。它们只是function的局部变量f1。



查看完整回答
反对 回复 2021-04-29
?
慕森王

TA贡献1777条经验 获得超3个赞

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

myPromise = new Promise((resolve) => resolve("myVal"))

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


查看完整回答
反对 回复 2021-04-29
  • 2 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信