Promise.constructor()
在学习 Promise 时,我们会看到 Promise 的构造函数 Promise()
,它接受一个函数作为参数,这个函数叫做 executor,它有两个参数,分别是 resolve 和 reject。executor 函数在 Promise 实例化时会被自动调用。
const promise = new Promise((resolve, reject) => { // 执行异步操作 // 如果操作成功,调用 resolve // 如果操作失败,调用 reject });
其中,resolve 和 reject 都是函数,它们分别用于将 Promise 的状态从未完成(pending)转换为已完成(fulfilled)和已拒绝(rejected)。
const promise = new Promise((resolve, reject) => { if (/* 异步操作成功 */) { resolve(/* 成功结果 */); } else { reject(/* 失败原因 */); } });
Promise.resolve()
Promise.resolve() 方法返回一个已完成的 Promise 对象,它接受一个参数,这个参数可以是一个值、一个 Promise 对象或一个 thenable 对象。如果参数是一个 Promise 对象,则 Promise.resolve() 方法会直接返回这个 Promise 对象。如果参数是一个 thenable 对象,则 Promise.resolve() 方法会将这个对象转换为 Promise 对象并返回。
const promise = Promise.resolve('Hello, world!'); promise.then((result) => { console.log(result); // 输出:Hello, world! });
const promise = Promise.resolve(new Promise((resolve, reject) => { setTimeout(() => { resolve('Hello, world!'); }, 1000); })); promise.then((result) => { console.log(result); // 输出:Hello, world! });
区别
Promise.constructor() 和 Promise.resolve() 的区别在于,Promise.constructor() 是用于创建一个新的 Promise 对象,而 Promise.resolve() 是用于将一个值或对象转换为 Promise 对象。Promise.resolve() 方法返回的 Promise 对象是已完成的,而 Promise.constructor() 方法返回的 Promise 对象是未完成的。
// javascriptcn.com 代码示例 const promise1 = new Promise((resolve, reject) => { setTimeout(() => { resolve('Hello, world!'); }, 1000); }); const promise2 = Promise.resolve(promise1); const promise3 = new Promise((resolve, reject) => { setTimeout(() => { resolve(promise1); }, 2000); }); promise2.then((result) => { console.log(result); // 输出:Hello, world! }); promise3.then((result) => { console.log(result); // 输出:Hello, world! });
在上面的示例中,promise2 和 promise3 都是返回 promise1 的 Promise 对象,但是它们的状态不同,promise2 的状态是已完成的,而 promise3 的状态是未完成的。
总结
Promise.constructor() 和 Promise.resolve() 都是 Promise 对象的方法,它们的作用不同。Promise.constructor() 用于创建一个新的 Promise 对象,而 Promise.resolve() 用于将一个值或对象转换为 Promise 对象。Promise.resolve() 方法返回的 Promise 对象是已完成的,而 Promise.constructor() 方法返回的 Promise 对象是未完成的。在实际开发中,我们可以根据需求选择使用这两个方法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6509106b95b1f8cacd3dad36