【发布时间】:2021-11-30 09:50:52
【问题描述】:
之前在这里提出的一个问题,与这个问题的标题完全相同,被回答为“你不应该使用它,而是使用它”,我想知道它的作用,而不是我还能做什么,这是关于理解而不是简单的复制粘贴。
我的问题很简单,这三种方法在创建promise时有什么区别?
const API = (item, fail) =>
new Promise((resolve, reject) => {
if (fail) reject(item + ' ...with an error');
setTimeout(() => resolve(item), 1000);
});
(async () => {
const pro1 = Promise.resolve(API('I am inside resolve'));
const pro2 = Promise.resolve(API('I am inside resolve', true));
const pro3 = Promise.resolve().then(() => API('I am thenable'));
const pro4 = Promise.resolve().then(() => API('I am thenable', true));
const pro5 = new Promise((resolve) => resolve(API('I am a new promise')));
const pro6 = new Promise((resolve) => resolve(API('I am a new promise', true)));
const store = [pro1, pro2, pro3, pro4, pro5, pro6];
const results = await Promise.allSettled(store);
for (const { status, value, reason } of results) {
if (status === 'fulfilled') console.log(value)
else console.log(reason)
}
})();
【问题讨论】:
-
好吧,如果
API总是返回一个承诺,那根本没有区别。当它返回一个普通值或抛出异常时,它很重要。 -
查看this的答案。
-
@Bergi,所以如果我这样做
const pro = API('I am a promise anyway')会是相同的,如果该功能是远离承诺? -
@Álvaro 是的,如果你知道
API总是返回一个承诺,那么Promise.resolve的东西都不是必需的 -
@Álvaro 如果您调用异步函数或始终返回 Promise 的函数,您可以编写
const store = [API("I'm a new promise")]而不使用Promise.resolve或其他额外的 Promise 包装。但如果这是你一直在问的,那就不清楚了。最好澄清一下,这将对其他用户有所帮助。