成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為討厭 Async/Await JavaScript 的開發(fā)人員提供七個簡單的異步/等待技巧

開發(fā) 前端
當(dāng)你需要處理多個 Promise 時,Promise.all() 一旦遇到一個失敗的 Promise 就會終止整個操作。而 Promise.allSettled() 則會等待所有 Promise 都完成(無論成功還是失敗),并返回每個 Promise 的狀態(tài)和值或錯誤信息。

如果你也對異步 JavaScript 感到頭疼,不妨試試以下這 7 個簡單實(shí)用的技巧,它們可以讓你重新愛上這項技術(shù)!

1. 使用 Promise.allSettled() 進(jìn)行更安全的批量處理

當(dāng)你需要處理多個 Promise 時,Promise.all() 一旦遇到一個失敗的 Promise 就會終止整個操作。而 Promise.allSettled() 則會等待所有 Promise 都完成(無論成功還是失敗),并返回每個 Promise 的狀態(tài)和值或錯誤信息。

const results = await Promise.allSettled([
  fetchData1(),
  fetchData2(),
  fetchData3(),
]);

results.forEach(result => {
  if (result.status === 'fulfilled') {
    console.log('成功:', result.value);
  } else {
    console.error('失敗:', result.reason);
  }
});

通過這種方式,你可以安全地處理所有操作,而不用擔(dān)心單個失敗會影響整體流程。

2. 為 Promise 添加超時功能,防止卡死

有些 Promise 可能會因為種種原因長時間懸而未決,為它們添加一個超時限制可以保護(hù)你的應(yīng)用程序。

const withTimeout = (promise, ms) =>
  Promise.race([
    promise,
    new Promise((_, reject) =>
      setTimeout(() => reject(new Error('操作超時')), ms)
    ),
  ]);

try {
  const data = await withTimeout(fetchData(), 5000);
} catch (err) {
  console.error(err.message); // 如果超時,將輸出 "操作超時"
}

通過這種方式,即使某個操作卡住,也不會拖累整個應(yīng)用。

3. 使用 for...of 實(shí)現(xiàn)順序異步循環(huán)

雖然 forEach() 是個好工具,但它不能很好地支持 async/await。使用 for...of 進(jìn)行順序異步操作更加直觀:

const urls = ['url1', 'url2', 'url3'];
for (const url of urls) {
  const data = await fetch(url);
  console.log(data);
}

這種方法可以確保每個請求依次執(zhí)行,而不會互相干擾。

4. 用 await 實(shí)現(xiàn)動態(tài)延時

在異步操作之間添加延時,可以通過 await 實(shí)現(xiàn)簡單而優(yōu)雅的方式,而不會阻塞主線程:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

console.log('開始');
await delay(2000); // 等待 2 秒
console.log('結(jié)束');

這種技巧在模擬異步環(huán)境或控制操作節(jié)奏時非常有用。

5. 在異步函數(shù)中始終使用 try...catch

即使在 async 函數(shù)中,也需要用 try...catch 來捕獲錯誤。將其作為一種習(xí)慣,可以避免遺漏異常處理:

async function fetchData(url) {
  try {
    const response = await fetch(url);
    if (!response.ok) throw new Error('請求失敗');
    return await response.json();
  } catch (err) {
    console.error('錯誤:', err.message);
    return null;
  }
}

這樣可以確保函數(shù)的健壯性,即使請求失敗也能 gracefully 處理。

6. 在循環(huán)外使用 await 實(shí)現(xiàn)批量處理

如果操作不需要按順序執(zhí)行,可以通過批量處理提升性能:

const urls = ['url1', 'url2', 'url3'];
const responses = await Promise.all(urls.map(url => fetch(url)));
const data = await Promise.all(responses.map(res => res.json()));
console.log(data);

這種方法適合需要并行處理多個任務(wù)的場景,例如批量獲取數(shù)據(jù)。

7. 結(jié)合 Async/Await 和生成器處理復(fù)雜流程

生成器函數(shù)可以用作異步流程中的“檢查點(diǎn)”,讓復(fù)雜的邏輯變得更容易理解:

function* generator() {
  yield fetchData1();
  yield fetchData2();
  yield fetchData3();
}

const runGenerator = async gen => {
  const iterator = gen();
  for (const promise of iterator) {
    console.log(await promise);
  }
};

await runGenerator(generator);

這種方式可以讓異步代碼的邏輯更加清晰,尤其是在需要分階段處理的場景下。

責(zé)任編輯:武曉燕 來源: 大遷世界
相關(guān)推薦

2023-05-22 14:57:47

2010-06-30 08:52:25

2021-09-27 09:00:00

開發(fā)微服務(wù)架構(gòu)

2022-06-26 07:08:25

Java IDE開發(fā)

2022-10-09 16:16:17

開發(fā)代碼庫網(wǎng)站

2011-05-10 17:14:49

開發(fā)人員產(chǎn)品經(jīng)理

2017-03-23 15:09:13

軟件開發(fā)人員

2020-07-23 08:21:25

PHP開發(fā)人員MVC

2017-10-24 11:59:41

JavaScript

2022-04-15 14:36:11

Java開發(fā)優(yōu)秀

2023-02-21 14:51:58

JavaScrip技巧開發(fā)

2020-12-21 09:00:00

數(shù)據(jù)庫MySQL技術(shù)

2022-05-09 07:40:16

WebCSS前端

2021-02-16 16:44:40

RustJavaScript開發(fā)

2024-06-03 10:35:41

2021-12-10 13:06:37

低代碼無代碼開發(fā)人員

2016-03-09 12:11:33

Web開發(fā)人員簡單步驟

2023-04-21 14:51:34

開發(fā)數(shù)據(jù)庫

2020-05-12 08:06:27

React開發(fā)JavaScript

2015-02-10 09:24:04

Web開發(fā)JavaScript工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲午夜精品一区二区三区他趣 | 亚洲一区二区三区四区五区中文 | 国产一区二区精品在线 | 日韩欧美亚洲 | 日本精品久久 | 久久精品a级毛片 | 久久99精品久久久97夜夜嗨 | 国产欧美在线播放 | 久久久精品一区二区三区 | 日韩av网址在线观看 | 操操日| 91久久| 亚洲国产一区在线 | 中文字幕国产高清 | 欧美精品二区 | a级免费观看视频 | 伦理片97 | 91精品国产91久久久久久三级 | 性做久久久久久免费观看欧美 | 免费精品| 99在线免费视频 | 国产精品一区二区在线 | 国产精品黄色 | 精品视频一区二区 | 国产在线二区 | 久久男人 | 亚洲精品久久久久久国产精华液 | 精品欧美一区免费观看α√ | 欧美视频精品 | 日韩欧美精品在线播放 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 九九热精品视频 | 久久精品亚洲一区二区三区浴池 | 啪啪精品 | 久久国产电影 | 丁香婷婷综合激情五月色 | 7799精品视频天天看 | 天天干夜夜操视频 | 免费看91 | 国产在线观| 日日噜噜夜夜爽爽狠狠 |