块1:
const promise = new Promise((resolve) => {
setTimeout(resolve, 100);
});
区块 2:
const promise = (async () => {
await new Promise(resolve => {
setTimeout(resolve, 100);
});
})();
上述两个块是否等效?有值得注意的区别吗?
我知道这是一个高度人为的例子,在这里 Block 2 没有太多用途。但我遇到的情况是,我想创建并存储对 Promise 的引用,但 Promise 执行程序函数需要使用 await 获取一些数据。但是声明
new Promise(async (resolve) => {});
被认为是一种反模式。在这种情况下,Block 2 是否更好?更新:提供一个更具体的示例,说明我要做什么:
export async function getData(request) {
// De-dupe fetches for the same request and return existing promise.
if (map.has(JSON.stringify(request))) {
return map.get(JSON.stringify(request));
}
const thePromise = (async () => {
const [foo, bar] = Promise.all(await getFoo(), await getBar());
const theData = await getTheData(foo, bar);
return theData.some.thing ? 'a' : 'b';
})();
map.put(JSON.stringify(request), thePromise);
return thePromise;
}
Promise.all(await getFoo(), await getBar());
),而且它没有在任何地方使用new Promise
构造函数和执行程序。 - Bergi