Baseline Widely available
Promise.all()
ã¯éçã¡ã½ããã§ãå
¥åã¨ãã¦ãããã¹ã®éåã®å復å¯è½ãªãã¸ã§ã¯ããåããåä¸ã® Promise
ãè¿ãã¾ãããã®è¿å´ããããããã¹ã¯ãå
¥åããããããã¹ããã¹ã¦å±¥è¡ãããã¨ãï¼ç©ºã®ã¤ãã¬ã¼ã¿ã¼ã渡ãããã¨ããå«ãï¼ããã®å±¥è¡ãããå¤ã®é
åã§ãå±¥è¡ããã¾ããå
¥åããããããã¹ã®ãããããæå¦ãããã¨ããã®æåã®æå¦çç±ã¨ã¨ãã«æå¦ããã¾ãã
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, "foo");
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
// Expected output: Array [3, 42, "foo"]
æ§æ 弿°
iterable
å復å¯è½ãªãã¸ã§ã¯ãï¼ãããã¹ã®é
å (Array
) ãªã©ï¼ã
次ã®ãã㪠Promise
ã§ãã
Promise.all()
ã¡ã½ããã¯ããããã¹ã®ä¸¦è¡å¦çã¡ã½ããã®ãã¡ã®ä¸ã¤ã§ãããã®ã¡ã½ããã¯ãè¤æ°ã®ãããã¹ã®çµæãéç´ããã®ã«ä¾¿å©ã§ãããã®ã¡ã½ããã¯ãã³ã¼ãå
¨ä½ãæ£å¸¸ã«åä½ããããã«ä¾åãã¦ããè¤æ°ã®é¢é£ããéåæã¿ã¹ã¯ããããã³ã¼ãã®å®è¡ãç¶ããåã«ããããã¹ã¦ãå±¥è¡ããããå ´åã«ãã使ããã¾ãã
ã¡ã¢: æ¥æ¬èªã®æè¡ææ¸ã§ã¯ããã®ã¡ã½ãããè¤æ°ã®ãããã¹ã並åã«å¦çããã¨èª¬æããããã¨ãããã¾ãããå®éã«ã¯è¤æ°ã®ã¹ã¬ããã§ãããã¹ãå¦çãããããã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ããã詳細ã¯ãããã¹ã®ä¸¦è¡å¦çãåç §ãã¦ãã ããã
Promise.all()
ã¯ãå
¥åããããããã¹ã®ãããããæå¦ãããã¨ç´ã¡ã«æå¦ããã¾ããããã«å¯¾ãã¦ãPromise.allSettled()
ãè¿ããããã¹ã¯ãå
¥åããããããã¹ã®ãããããæå¦ããããã©ããã«é¢ãããããã¹ã¦ã®å
¥åããããããã¹ãå®äºããã®ãå¾
ã¡ã¾ããå
¥åãããå復å¯è½ãªãã¸ã§ã¯ãã«å«ã¾ãããããã¹ã®ãã¹ã¦ã®æçµçµæãå¿
è¦ãªå ´åã¯ãallSettled()
ã使ç¨ãã¦ãã ããã
Promise.all
ã¯ãã¹ã¦ã®å±¥è¡ï¼ã¾ãã¯æåã®æå¦ï¼ãå¾
ã¡ã¾ãã
const p1 = Promise.resolve(3);
const p2 = 1337;
const p3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("foo");
}, 100);
});
Promise.all([p1, p2, p3]).then((values) => {
console.log(values); // [3, 1337, "foo"]
});
å復å¯è½ãªãã¸ã§ã¯ãã«ãããã¹ã§ã¯ãªãå¤ãå«ã¾ããå ´åã¯ç¡è¦ããã¾ãããï¼ãããã¹ãå±¥è¡ãããå ´åï¼è¿ããããããã¹ã®é åã®å¤ã«ã¯ã«ã¦ã³ãããã¾ãã
// ãã¹ã¦ã®å¤ããããã¹ã§ãªããããè¿ããããããã¹ã¯å±¥è¡ããã
const p = Promise.all([1, 2, 3]);
// å¯ä¸ã®å
¥åãããã¹ã¯ãã§ã«å±¥è¡ããã¦ãããã®ã§ã
// è¿ããããããã¹ã¯å±¥è¡ããã
const p2 = Promise.all([1, 2, 3, Promise.resolve(444)]);
// 1 ã¤ã®ï¼ããã¦å¯ä¸ã®ï¼å
¥åãããã¹ãæå¦ãããã
// ãããã£ã¦ãè¿ããããããã¹ãæå¦ãããã
const p3 = Promise.all([1, 2, 3, Promise.reject(555)]);
// setTimeout ã使ããã¨ã§ããã¥ã¼ã空ã«ãªã£ã¦ããã³ã¼ããå®è¡ãããã¨ãã§ãã
setTimeout(() => {
console.log(p);
console.log(p2);
console.log(p3);
});
// ãã°åºå
// Promise { <state>: "fulfilled", <value>: Array[3] }
// Promise { <state>: "fulfilled", <value>: Array[4] }
// Promise { <state>: "rejected", <reason>: 555 }
Promise.all ã®éåææ§ã»åææ§
以ä¸ã®ä¾ã§ã¯ Promise.all
ã®éåææ§ï¼ã¾ãã¯æ¸¡ãããå復å¯è½ãªãã¸ã§ã¯ãã空ã®å ´åãåææ§ï¼ã宿¼ãã¾ãã
// Promise.all ãã§ããã ãæ©ã使ç¨ããããã«ã
// ãã§ã«è§£æ±ºããããããã¹ã®é
åãæ¸¡ã
const resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
const p = Promise.all(resolvedPromisesArray);
// p ã®å¤ãç´æ¥ãã°åºå
console.log(p);
// setTimeout ã使ç¨ãã¦ã¹ã¿ãã¯ã空ã«ãªã£ãå¾ã«ã³ã¼ããå®è¡ãããã¨ãã§ãã
setTimeout(() => {
console.log("ãã¥ã¼ã空ã«ãªãã¾ãã");
console.log(p);
});
// Logs, in order:
// Promise { <state>: "pending" }
// ãã¥ã¼ã空ã«ãªãã¾ãã
// Promise { <state>: "fulfilled", <value>: Array[2] }
Promise.all
ãæå¦ãããã¨ããåããã¨ãèµ·ãã¾ãã
const mixedPromisesArray = [Promise.resolve(33), Promise.reject(44)];
const p = Promise.all(mixedPromisesArray);
console.log(p);
setTimeout(() => {
console.log("ãã¥ã¼ã空ã«ãªãã¾ãã");
console.log(p);
});
// ãã°åºå
// Promise { <state>: "pending" }
// ãã¥ã¼ã空ã«ãªãã¾ãã
// Promise { <state>: "rejected", <reason>: 44 }
ããããPromise.all
ã¯æ¸¡ãããå復å¯è½ãªãã¸ã§ã¯ãã空ã®å ´åã ãåæçã«è§£æ±ºãã¾ãã
const p = Promise.all([]); // ç´ã¡ã«è§£æ±ºããã
const p2 = Promise.all([1337, "hi"]); // ãããã¹ã§ã¯ãªãå¤ã¯ç¡è¦ãããããè©ä¾¡ã¯éåæã«è¡ããã
console.log(p);
console.log(p2);
setTimeout(() => {
console.log("ãã¥ã¼ã空ã«ãªãã¾ãã");
console.log(p2);
});
// ãã°åºå:
// Promise { <state>: "fulfilled", <value>: Array[0] }
// Promise { <state>: "pending" }
// ãã¥ã¼ã空ã«ãªãã¾ãã
// Promise { <state>: "fulfilled", <value>: Array[2] }
Promise.all() ã¨éåæé¢æ°ã®ä½¿ç¨
éåæé¢æ°å ã§ã¯ãã³ã¼ãããéå°ã«å¾ ã¤ããã¨ã¯ã¨ã¦ããããããã¨ã§ããä¾ãã°ã以ä¸ã®ãããªé¢æ°ãæå®ãããã¨ãã¾ãã
function promptForDishChoice() {
return new Promise((resolve, reject) => {
const dialog = document.createElement("dialog");
dialog.innerHTML = `
<form method="dialog">
<p>What would you like to eat?</p>
<select>
<option value="pizza">Pizza</option>
<option value="pasta">Pasta</option>
<option value="salad">Salad</option>
</select>
<menu>
<li><button value="cancel">Cancel</button></li>
<li><button type="submit" value="ok">OK</button></li>
</menu>
</form>
`;
dialog.addEventListener("close", () => {
if (dialog.returnValue === "ok") {
resolve(dialog.querySelector("select").value);
} else {
reject(new Error("User cancelled dialog"));
}
});
document.body.appendChild(dialog);
dialog.showModal();
});
}
async function fetchPrices() {
const response = await fetch("/prices");
return await response.json();
}
次ã®ããã«é¢æ°ãæ¸ãããããã¾ããã
async function getPrice() {
const choice = await promptForDishChoice();
const prices = await fetchPrices();
return prices[choice];
}
ãã ããpromptForChoice
㨠fetchPrices
ã®å®è¡ã¯ãäºãã®çµæã«ã¯ä¾åããªããã¨ã«æ³¨æãã¦ãã ãããã¦ã¼ã¶ã¼ãæçãé¸ãã§ããéãããã¯ã°ã©ã¦ã³ãã§ä¾¡æ ¼ãåå¾ããã¦ãåé¡ããã¾ããããä¸è¨ã®ã³ã¼ãã§ã¯ await
æ¼ç®åã«ãã£ã¦é¸æãè¡ãããã¾ã§éåæé¢æ°ã䏿忢ãããã®å¾ä¾¡æ ¼ãåå¾ãããã¾ã§ååº¦ä¸æåæ¢ãã¾ããPromise.all
ã使ç¨ããã°ãçµæãæå®ãããåã«ã¦ã¼ã¶ã¼ãä¾¡æ ¼ã®åå¾ãå¾
ããã«ããããã並è¡ãã¦å®è¡ãããã¨ãã§ãã¾ãã
async function getPrice() {
const [choice, prices] = await Promise.all([
promptForDishChoice(),
fetchPrices(),
]);
return prices[choice];
}
Promise.all
ã¯ã¨ã©ã¼å¦çãç´æçã§ãããããããã§ã®ä¸¦è¡å¦çã¡ã½ããã«ã¯æé©ãªé¸æã§ããããããããã®ãããã¹ãæå¦ãããããçµæãããå©ç¨ã§ããªããªãã await å¼å
¨ä½ãä¾å¤ãçºçãã¾ãã
Promise.all
ã¯ãããã¹ã®å復å¯è½ãªãã¸ã§ã¯ããåãå
¥ããã®ã§ãããã¤ãã®éåæé¢æ°ã®å®è¡ã並ååããããã«ä½¿ç¨ããã«ã¯ãéåæé¢æ°ãå¼ã³åºãã¦è¿ããããããã¹ã使ç¨ããå¿
è¦ãããã¾ãã颿°ã¯ãããã¹ã§ã¯ãªãã®ã§ã Promise.all
ã«ç´æ¥æ¸¡ãã¦ãåä½ãã¾ããã
async function getPrice() {
const [choice, prices] = await Promise.all([
promptForDishChoice,
fetchPrices,
]);
// `choice` ããã³ `prices` ã¯å
ã¨åãéåæé¢æ°ã§ãã
// Promise.all() ã¯ãããã¹ã§ãªããã®ã«ã¯ä½ããã¾ããã
}
Promise.all ã®ãã§ã¤ã«ãã¡ã¹ãã®æå
Promise.all
ã¯è¦ç´ ã®ã²ã¨ã¤ã§ãæå¦ãããã¨æå¦ãã¾ããä¾ãã°ãã¿ã¤ã ã¢ã¦ãå¾ã« 4 ã¤ã®ãããã¹ã解決ãã¦ãã 1 ã¤ã®ãããã¹ãç´ã¡ã«æå¦ãããå ´åã Promise.all
ã¯ç´ã¡ã«æå¦ããã¾ãã
const p1 = new Promise((resolve, reject) => {
setTimeout(() => resolve("one"), 1000);
});
const p2 = new Promise((resolve, reject) => {
setTimeout(() => resolve("two"), 2000);
});
const p3 = new Promise((resolve, reject) => {
setTimeout(() => resolve("three"), 3000);
});
const p4 = new Promise((resolve, reject) => {
setTimeout(() => resolve("four"), 4000);
});
const p5 = new Promise((resolve, reject) => {
reject(new Error("reject"));
});
// .catch ã®ä½¿ç¨
Promise.all([p1, p2, p3, p4, p5])
.then((values) => {
console.log(values);
})
.catch((error) => {
console.error(error.message);
});
// ãã°åºå:
// "reject"
ãã®åä½ã¯å¤±æããå¯è½æ§ãå¶å¾¡ãããã¨ã§å¤æ´ãããã¨ãã§ãã¾ãã
const p1 = new Promise((resolve, reject) => {
setTimeout(() => resolve("p1_delayed_resolution"), 1000);
});
const p2 = new Promise((resolve, reject) => {
reject(new Error("p2_immediate_rejection"));
});
Promise.all([p1.catch((error) => error), p2.catch((error) => error)]).then(
(values) => {
console.log(values[0]); // "p1_delayed_resolution"
console.error(values[1]); // "Error: p2_immediate_rejection"
},
);
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4