Baseline Widely available
Promise.any()
éææ¹æ³å°ä¸ä¸ª Promise å¯è¿ä»£å¯¹è±¡ä½ä¸ºè¾å
¥ï¼å¹¶è¿åä¸ä¸ª Promise
ãå½è¾å
¥çä»»ä½ä¸ä¸ª Promise å
ç°æ¶ï¼è¿ä¸ªè¿åç Promise å°ä¼å
ç°ï¼å¹¶è¿å第ä¸ä¸ªå
ç°çå¼ã彿æè¾å
¥ Promise é½è¢«æç»ï¼å
æ¬ä¼ éäºç©ºçå¯è¿ä»£å¯¹è±¡ï¼æ¶ï¼å®ä¼ä»¥ä¸ä¸ªå
嫿ç»åå æ°ç»ç AggregateError
æç»ã
const promise1 = Promise.reject(0);
const promise2 = new Promise((resolve) => setTimeout(resolve, 100, "quick"));
const promise3 = new Promise((resolve) => setTimeout(resolve, 500, "slow"));
const promises = [promise1, promise2, promise3];
Promise.any(promises).then((value) => console.log(value));
// Expected output: "quick"
è¯æ³ åæ°
iterable
ä¸ä¸ª promise çå¯è¿ä»£å¯¹è±¡ï¼ä¾å¦ä¸ä¸ªæ°ç»ï¼ã
ä¸ä¸ª Promise
ï¼å
¶ç¶æä¸ºï¼
iterable
为空çè¯ãiterable
ä¸çä»»ä½ä¸ä¸ª Promise 被å
ç°æ¶ï¼è¿åç Promise å°±ä¼è¢«å
ç°ãå
¶å
ç°å¼æ¯ç¬¬ä¸ä¸ªå
ç°ç Promise çå
ç°å¼ãiterable
ä¸çææ Promise é½è¢«æç»æ¶ãæç»åå æ¯ä¸ä¸ª AggregateError
ï¼å
¶ errors
屿§å
å«ä¸ä¸ªæç»åå æ°ç»ãæ è®ºå®æé¡ºåºå¦ä½ï¼è¿äºéè¯¯é½æ¯æç
§ä¼ å
¥ç Promise çé¡ºåºæåºãå¦æä¼ éç iterable
æ¯é空çï¼ä½ä¸å
å«å¾
å®ç Promiseï¼åè¿åç Promise ä»ç¶æ¯å¼æ¥æç»çï¼è䏿¯åæ¥æç»çï¼ãPromise.any()
æ¹æ³æ¯ Promise å¹¶åæ¹æ³ä¹ä¸ãè¯¥æ¹æ³å¯¹äºè¿å第ä¸ä¸ªå
ç°ç Promise é常æç¨ã䏿¦æä¸ä¸ª Promise å
ç°ï¼å®å°±ä¼ç«å³è¿åï¼å æ¤ä¸ä¼çå¾
å
¶ä» Promise 宿ã
ä¸ Promise.all()
è¿åä¸ä¸ªå
ç°å¼æ°ç»ä¸åçæ¯ï¼æä»¬åªä¼å¾å°ä¸ä¸ªå
ç°å¼ï¼å设è³å°æä¸ä¸ª Promise 被å
ç°ï¼ãæ¤æ¹æ³å¯¹äºé£äºå¦ææä»¬åªéè¦ä¸ä¸ª Promise 被å
ç°ï¼ä½ä¸å¨æåªä¸ä¸ªè¢«å
ç°çæ
嵿´æçã请注æå¦ä¸ä¸ªåºå«ï¼è¯¥æ¹æ³å¨æ¥æ¶å°ç©ºçå¯è¿ä»£å¯¹è±¡æ¶ä¼æç»ï¼å 为å®é
ä¸ï¼è¯¥å¯è¿ä»£å¯¹è±¡ä¸å
å«ä»»ä½å
ç°ç项ãä½ å¯ä»¥å° Promise.any()
å Promise.all()
ä¸ Array.prototype.some()
å Array.prototype.every()
è¿è¡æ¯è¾ã
åæ¶ï¼ä¸ Promise.race()
è¿å第ä¸ä¸ªæ²å®ï¼æ 论æ¯å
ç°è¿æ¯æç»ï¼çå¼ä¸åçæ¯ï¼è¯¥æ¹æ³è¿å第ä¸ä¸ªå
ç°çå¼ãè¯¥æ¹æ³å¿½ç¥ææè¢«æç»ç Promiseï¼ç´å°ç¬¬ä¸ä¸ªè¢«å
ç°ç Promiseã
Promise.any()
ä¼ä»¥ç¬¬ä¸ä¸ªå
ç°ç Promise æ¥å
ç°ï¼å³ä½¿æ Promise å
被æç»ãè¿ä¸ Promise.race()
ä¸åï¼åè
ä¼ä½¿ç¨ç¬¬ä¸ä¸ªæ²å®ç Promise æ¥å
ç°ææç»ã
const pErr = new Promise((resolve, reject) => {
reject("æ»æ¯å¤±è´¥");
});
const pSlow = new Promise((resolve, reject) => {
setTimeout(resolve, 500, "æç»å®æ");
});
const pFast = new Promise((resolve, reject) => {
setTimeout(resolve, 100, "å¾å¿«å®æ");
});
Promise.any([pErr, pSlow, pFast]).then((value) => {
console.log(value);
// pFast 第ä¸ä¸ªå
ç°
});
// æå°ï¼
// å¾å¿«å®æ
æç»å¹¶è¿å AggregateError
å¦ææ²¡æ Promise 被å
ç°ï¼Promise.any()
å°ä½¿ç¨ AggregateError
è¿è¡æç»ã
const failure = new Promise((resolve, reject) => {
reject("æ»æ¯å¤±è´¥");
});
Promise.any([failure]).catch((err) => {
console.log(err);
});
// AggregateError: No Promise in Promise.any was resolved
æ¾ç¤ºç¬¬ä¸å¼ å·²å è½½çå¾ç
å¨è¿ä¸ªä¾åï¼æä»¬æä¸ä¸ªè·åå¾çå¹¶è¿å blob ç彿°ï¼æä»¬ä½¿ç¨ Promise.any()
æ¥è·åä¸äºå¾çå¹¶æ¾ç¤ºç¬¬ä¸å¼ å¯ç¨çå¾çï¼å³æå
è§£å³çé£ä¸ª promiseï¼ã
async function fetchAndDecode(url, description) {
const res = await fetch(url);
if (!res.ok) {
throw new Error(`HTTP é误ï¼ç¶æç ï¼${res.status}`);
}
const data = await res.blob();
return [data, description];
}
const coffee = fetchAndDecode("coffee.jpg", "Coffee");
const tea = fetchAndDecode("tea.jpg", "Tea");
Promise.any([coffee, tea])
.then(([blob, description]) => {
const objectURL = URL.createObjectURL(blob);
const image = document.createElement("img");
image.src = objectURL;
image.alt = description;
document.body.appendChild(image);
})
.catch((e) => {
console.error(e);
});
è§è æµè§å¨å
¼å®¹æ§ åè§
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