Baseline Widely available
Promise.race()
ã¯éçã¡ã½ããã§ãå
¥åã¨ãã¦ãããã¹ã®å復å¯è½ãªãã¸ã§ã¯ããåãåããåä¸ã® Promise
ãè¿ãã¾ãããã®è¿ããããããã¹ã¯ãæåã«æ±ºå®ãããããã¹ã®æçµçãªç¶æ
ã§æ±ºå®ããã¾ãã
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, "one");
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, "two");
});
Promise.race([promise1, promise2]).then((value) => {
console.log(value);
// Both resolve, but promise2 is faster
});
// Expected output: "two"
æ§æ 弿° è¿å¤
Promise
ã§ãå復å¯è½ãªãã¸ã§ã¯ãã®æåã®ãããã¹ã®æçµçãªç¶æ
ã§éåæã«æ±ºå®ãã¾ããè¨ãæããã¨ãæåã«æ±ºå®ããããããã¹ãå±¥è¡ãããã°å±¥è¡ãããæåã«æ±ºå®ããããããã¹ãæå¦ãããã°æå¦ããã¾ãï¼è¿ããããããã¹ã¯ã渡ãããå復å¯è½ãªãã¸ã§ã¯ãã空ã®å ´åãæ°¸ä¹
ã«å¾
æ©ç¶æ
ã«ãªãã¾ããæ¸¡ãããå復å¯è½ãªãã¸ã§ã¯ãã空ã§ã¯ãªãããå¾
æ©ä¸ã®ãããã¹ãå«ãã§ããªãã£ãå ´åãè¿ããããããã¹ã¯ï¼åæçã§ã¯ãªãï¼éåæçã«æ±ºå®ããã¾ãã
Promise.race()
ã¡ã½ããã¯ãããã¹ä¸¦è¡å¦çã¡ã½ããã® 1 ã¤ã§ããããã¯æåã®éåæã¿ã¹ã¯ãå®å
¨ã«å®äºããããããæçµçãªç¶æ
ã¯æ°ã«ããªãï¼ã¤ã¾ããæåã失æãããå¾ãï¼å ´åã«æç¨ã§ãã
ã¡ã¢: æ¥æ¬èªã®æè¡ææ¸ã§ã¯ããã®ã¡ã½ãããè¤æ°ã®ãããã¹ã並åã«å¦çããã¨èª¬æããããã¨ãããã¾ãããå®éã«ã¯è¤æ°ã®ã¹ã¬ããã§ãããã¹ãå¦çãããããã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ããã詳細ã¯ãããã¹ã®ä¸¦è¡å¦çãåç §ãã¦ãã ããã
å復å¯è½ãªãã¸ã§ã¯ãã« 1 ã¤ä»¥ä¸ã®éãããã¹å¤ããã³/ã¾ãã¯æ¢ã«ç¢ºå®ãããããã¹ãæ ¼ç´ããã¦ããå ´åã Promise.race()
ã¯å復å¯è½ãªãã¸ã§ã¯ãã§æåã«è¦ã¤ãã£ãå¤ã«ç¢ºå®ãã¾ãã
ãã®ä¾ã§ã¯ã Promise.race()
ã使ç¨ãã¦ãsetTimeout()
ã§å®è£
ãããè¤æ°ã®ã¿ã¤ãã¼ãç«¶ããããã¨ãã§ãããã¨ã示ãã¦ãã¾ããæãæéã®çãã¿ã¤ãã¼ã常ã«ã¬ã¼ã¹ã«åã¡ãçµæã®ãããã¹ã®ç¶æ
ã¨ãªãã¾ãã
function sleep(time, value, state) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (state === "fulfill") {
return resolve(value);
} else {
return reject(new Error(value));
}
}, time);
});
}
const p1 = sleep(500, "one", "fulfill");
const p2 = sleep(100, "two", "fulfill");
Promise.race([p1, p2]).then((value) => {
console.log(value); // "two"
// Both fulfill, but p2 is faster
});
const p3 = sleep(100, "three", "fulfill");
const p4 = sleep(500, "four", "reject");
Promise.race([p3, p4]).then(
(value) => {
console.log(value); // "three"
// p3 is faster, so it fulfills
},
(error) => {
// Not called
},
);
const p5 = sleep(500, "five", "fulfill");
const p6 = sleep(100, "six", "reject");
Promise.race([p5, p6]).then(
(value) => {
// Not called
},
(error) => {
console.error(error.message); // "six"
// p6 is faster, so it rejects
},
);
Promise.race ã®éåææ§
以ä¸ã®ä¾ã§ã¯ã Promise.race
ã®éåææ§ã示ãã¦ãã¾ããä»ã®ãããã¹ä¸¦è¡å¦çã¡ã½ããã¨ã¯ç°ãªãã Promise.race
ã¯å¸¸ã«éåæã§ããå復å¯è½ãªãã¸ã§ã¯ãã空ã®å ´åã§ããæ±ºãã¦åæçã«è§£æ±ºãããã¨ã¯ããã¾ããã
// Promise.race ãã§ããã ãæ©ãèµ·åãããããã«ã
// 解決æ¸ã¿ã®ãããã¹ã®é
åã弿°ã¨ãã¦æ¸¡ãã¦ãã¾ãã
const resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
const p = Promise.race(resolvedPromisesArray);
// ç´ã¡ã« p ã®å¤ãåºå
console.log(p);
// setTimeout ã使ç¨ããã¨ãã¹ã¿ãã¯ã空ã«ãªã£ãå¾ã§ã³ã¼ããå®è¡ããã
setTimeout(() => {
console.log("ã¹ã¿ãã¯ã空ã§ã");
console.log(p);
});
// ãã°ï¼é çªã«ï¼:
// Promise { <state>: "pending" }
// ã¹ã¿ãã¯ã空ã§ã
// Promise { <state>: "fulfilled", <value>: 33 }
空ã®å復å¯è½ãªãã¸ã§ã¯ããæ¸¡ãã¨ãç¡éã«è§£æ±ºããªããããã¹ãè¿ããã¾ãã
const foreverPendingPromise = Promise.race([]);
console.log(foreverPendingPromise);
setTimeout(() => {
console.log("ã¹ã¿ãã¯ã空ã§ã");
console.log(foreverPendingPromise);
});
// ãã°ï¼é çªã«ï¼:
// Promise { <state>: "pending" }
// ã¹ã¿ãã¯ã空ã§ã
// Promise { <state>: "pending" }
å復å¯è½ãªãã¸ã§ã¯ãã®ä¸ã« 1 ã¤ä»¥ä¸ã®ãããã¹ä»¥å¤ã®å¤ãããã§ã«è§£æ±ºãããããã¹ãå«ã¾ãã¦ããã¨ã Promise.race
ã¯é
åã®ä¸ã§è¦ã¤ãã£ãæåã®ãããã®å¤ã§è§£æ±ºãã¾ãã
const foreverPendingPromise = Promise.race([]);
const alreadyFulfilledProm = Promise.resolve(100);
const arr = [foreverPendingPromise, alreadyFulfilledProm, "non-Promise value"];
const arr2 = [foreverPendingPromise, "non-Promise value", Promise.resolve(100)];
const p = Promise.race(arr);
const p2 = Promise.race(arr2);
console.log(p);
console.log(p2);
setTimeout(() => {
console.log("ã¹ã¿ãã¯ã空ã§ã");
console.log(p);
console.log(p2);
});
// ãã°ï¼é çªã«ï¼
// Promise { <state>: "pending" }
// Promise { <state>: "pending" }
// ã¹ã¿ãã¯ã空ã§ã
// Promise { <state>: "fulfilled", <value>: 100 }
// Promise { <state>: "fulfilled", <value>: "non-Promise value" }
Promise.race() ã使ç¨ãã¦ã¿ã¤ã ã¢ã¦ãã®ãªã¯ã¨ã¹ããå®è£
é·ããªããããªãªã¯ã¨ã¹ããæå¦ããã¿ã¤ãã¼ãä¿æããå¶éæéãçµéããã¨ãã«ãçµæã®ãããã¹ãèªåçã«æå¦ãããããã«ã¬ã¼ã¹ãããã¨ãã§ãã¾ãã
const data = Promise.race([
fetch("/api"),
new Promise((resolve, reject) => {
// Reject after 5 seconds
setTimeout(() => reject(new Error("Request timed out")), 5000);
}),
])
.then((res) => res.json())
.catch((err) => displayError(err));
data
ã®ãããã¹ãå±¥è¡ãããå ´åã¯ã /api
ããåå¾ããããã¼ã¿ãæ ¼ç´ããã¾ããããã§ãªãå ´åã¯ã fetch
ã 5 ç§éå¾
æ©ãã¦ããå ´åã«æå¦ããã setTimeout
ã¿ã¤ãã¼ã¨ã®ç«¶äºã«è² ãããã¨ã«ãªãã¾ãã
Promise.race()
ã¯å復å¯è½ãªãã¸ã§ã¯ãã®ä¸ã§æåã«å¾
æ©ãã¦ããªããããã¹ã«è§£æ±ºãããããå¾
æ©ãã¦ãããã©ãããå«ãã¦ãããã¹ã®ç¶æ
ã調ã¹ããã¨ãã§ãã¾ãããã®ä¾ã¯ promise-status-async
ããå¼ç¨ãã¦ãã¾ãã
function promiseState(promise) {
const pendingState = { status: "pending" };
return Promise.race([promise, pendingState]).then(
(value) =>
value === pendingState ? value : { status: "fulfilled", value },
(reason) => ({ status: "rejected", reason }),
);
}
ãã®é¢æ°ã§ã¯ã promise
ãå¾
æ©ä¸ã§ããã°ã 2 ã¤ç®ã®å¤ã§ãã pendingState
ãããããã¹ã§ã¯ãªããã¬ã¼ã¹ã®çµæã«ãªãã¾ãããã以å¤ã®å ´åã promise
ãæ¢ã«æ±ºå®ããã¦ããã°ã onFulfilled
㨠onRejected
ãã³ãã©ã¼ã«ãã£ã¦ãã®ç¶æ
ãç¥ããã¨ãã§ããã§ããããä¾ãã°æ¬¡ã®ããã«ãªãã¾ãã
const p1 = new Promise((res) => setTimeout(() => res(100), 100));
const p2 = new Promise((res) => setTimeout(() => res(200), 200));
const p3 = new Promise((res, rej) => setTimeout(() => rej(300), 100));
async function getStates() {
console.log(await promiseState(p1));
console.log(await promiseState(p2));
console.log(await promiseState(p3));
}
console.log("Immediately after initiation:");
getStates();
setTimeout(() => {
console.log("After waiting for 100ms:");
getStates();
}, 100);
// ãã°åºå:
// Immediately after initiation:
// { status: 'pending' }
// { status: 'pending' }
// { status: 'pending' }
// After waiting for 100ms:
// { status: 'fulfilled', value: 100 }
// { status: 'pending' }
// { status: 'rejected', reason: 300 }
ã¡ã¢: promiseState
颿°ã¯éåæã§å®è¡ããã¾ãããããã¹ã®å¤ãåæçã«åå¾ããæ¹æ³ããªãããã§ãï¼ã¤ã¾ãã then()
ã await
ããªãå ´åï¼ããã¨ããããã¹ãæ¢ã«æ±ºå®ããã¦ããã¨ãã¦ãã§ããããããpromiseState()
ã¯å¸¸ã« 1 ãã£ãã¯ä»¥å
ã«å±¥è¡ãããå®éã«ãããã¹ã®æ±ºå®ãå¾
ã¤ãã¨ã¯ããã¾ããã
Promise.race
ã¯æåã«æ±ºå®ããã Promise
ãåãã¾ãã
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, "one");
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(reject, 100, "two");
});
Promise.race([promise1, promise2])
.then((value) => {
console.log("succeeded with value:", value);
})
.catch((reason) => {
// promise1 ã®ã¿ãå±¥è¡ããããã promise2 ã®æ¹ãæ©ã決å®ãã
console.error("failed with reason:", reason);
});
// failed with reason: two
Promise.any
ã¯æåã«å±¥è¡ããã Promise
ãåãã¾ãã
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, "one");
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(reject, 100, "two");
});
Promise.any([promise1, promise2])
.then((value) => {
// promise1 ã®ã¿ãå±¥è¡ããããã promise2 ã®æ¹ãæ©ã決å®ãã
console.log("succeeded with value:", value);
})
.catch((reason) => {
console.error("failed with reason:", reason);
});
// succeeded with value: one
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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