发布时间:2026/8/11 20:02:52
JavaScriptの非同期処理:Promiseによる並行と直列処理の最適な実装方法 JavaScriptの非同期処理Promiseによる並行と直列処理の最適な実装方法【免费下载链接】JavaScriptTrainingTraining course repository for JavaScript项目地址: https://gitcode.com/gh_mirrors/ja/JavaScriptTrainingJavaScriptの非同期処理は現代のWeb開発において欠かせない技術です。特にAPI通信やファイル読み込みなどの時間のかかる処理を効率的に扱うためには、Promiseを活用した並行処理と直列処理の実装方法をマスターする必要があります。この記事では、初心者でも理解しやすいように、Promiseを使った非同期処理の基本から応用までを解説します。Promiseの基本非同期処理の基礎PromiseはJavaScriptにおける非同期処理を扱うためのオブジェクトです。非同期処理の状態進行中、成功、失敗を表し、処理の完了時に結果を返します。Promiseには主に3つの状態がありますpending進行中処理がまだ完了していない状態fulfilled成功処理が正常に完了した状態rejected失敗処理がエラーで終了した状態Promiseを作成するには、new Promise()コンストラクタを使用します。コンストラクタにはコールバック関数を渡し、その中で非同期処理を記述します。例えば、一定時間後に値を返すPromiseは以下のように作成できますfunction createWaitPromise(value, msec) { return new Promise(function(resolve) { setTimeout(resolve, msec, value); }); }この関数は、指定したミリ秒後にvalueを返すPromiseを作成します。resolve関数は、Promiseを成功状態にし、結果を渡すために使用されます。thenメソッドPromiseの結果を処理するPromiseが成功状態fulfilledになったときに実行される処理は、thenメソッドを使って定義します。thenメソッドはコールバック関数を受け取り、その引数にPromiseの結果が渡されます。例えば、以下のコードはPromiseが解決されたときにメッセージを表示しますvar promise Promise.resolve(resolved!); promise.then(function(msg) { console.log(msg); // resolved! が表示される });thenメソッドは新しいPromiseを返すため、チェーンすることができます。これにより、複数の非同期処理を順番に実行する直列処理を実現できます。catchメソッドエラー処理を行うPromiseが失敗状態rejectedになったときに実行される処理は、catchメソッドを使って定義します。catchメソッドはエラーを引数に取るコールバック関数を受け取ります。例えば、以下のコードはPromiseが拒否されたときにエラーメッセージを表示しますvar promise Promise.reject(rejected!); promise.catch(function(msg) { console.log(msg); // rejected! が表示される });thenメソッドの第2引数としてエラーハンドラーを指定することもできますが、catchメソッドを使用する方が可読性が高く推奨されています。Promise.all複数のPromiseを並行処理する複数の非同期処理を並行して実行し、すべての処理が完了したら結果をまとめて取得するには、Promise.allメソッドを使用します。Promise.allはPromiseの配列を受け取り、すべてのPromiseが解決されたときにそれぞれの結果を配列として返す新しいPromiseを作成します。例えば、以下のコードは3つのPromiseを並行処理し、すべての結果を取得しますvar messageFragments [あなたと, java, 今すぐダウンロード]; var promise1 createWaitPromise(messageFragments[0], 10); var promise2 createWaitPromise(messageFragments[1], 20); var promise3 createWaitPromise(messageFragments[2], 30); var promise Promise.all([promise1, promise2, promise3]); promise.then(function(results) { console.log(results); // [あなたと, java, 今すぐダウンロード] が表示される });Promise.allは、すべてのPromiseが成功するまで待機します。一つでもPromiseが拒否された場合、直ちに拒否されたPromiseのエラーを返します。Promise.race最も速く完了したPromiseを取得する複数の非同期処理の中で、最も速く完了した処理の結果を取得するには、Promise.raceメソッドを使用します。Promise.raceはPromiseの配列を受け取り、最初に解決または拒否されたPromiseの結果を返す新しいPromiseを作成します。例えば、以下のコードは3つのPromiseの中で最も速く完了したものの結果を取得しますvar messageFragments [30億の, デバイスで, 走るjava]; var promise1 createWaitPromise(messageFragments[0], 30); var promise2 createWaitPromise(messageFragments[1], 10); var promise3 createWaitPromise(messageFragments[2], 30); var promise Promise.race([promise1, promise2, promise3]); promise.then(function(result) { console.log(result); // デバイスで が表示される最も速く完了したpromise2の結果 });Promise.raceは、最初に完了したPromiseが成功した場合にはその結果を、失敗した場合にはそのエラーを返します。直列処理 vs 並行処理最適な実装方法非同期処理を実装する際には、直列処理と並行処理のどちらを使用するかを判断する必要があります。以下にそれぞれの適用シーンと実装方法を説明します。直列処理処理を順番に実行する前の処理の結果に依存する場合や、処理を順番に実行する必要がある場合には直列処理を使用します。直列処理はthenメソッドをチェーンすることで実現できます。例えば、APIからデータを取得し、そのデータを加工して再びAPIに送信する場合などに直列処理が適していますfetch(/api/data) .then(function(response) { return response.json(); }) .then(function(data) { return processData(data); // データを加工する関数 }) .then(function(processedData) { return fetch(/api/data, { method: POST, body: JSON.stringify(processedData) }); }) .then(function(response) { console.log(データが正常に送信されました); }) .catch(function(error) { console.error(エラーが発生しました:, error); });並行処理処理を同時に実行する処理が互いに依存せず、同時に実行できる場合には並行処理を使用します。並行処理はPromise.allメソッドを使用することで実現できます。例えば、複数のAPIからデータを並行して取得する場合に並行処理が適していますvar promise1 fetch(/api/data1).then(function(response) { return response.json(); }); var promise2 fetch(/api/data2).then(function(response) { return response.json(); }); var promise3 fetch(/api/data3).then(function(response) { return response.json(); }); Promise.all([promise1, promise2, promise3]) .then(function(results) { var data1 results[0]; var data2 results[1]; var data3 results[2]; // データを統合する処理 }) .catch(function(error) { console.error(エラーが発生しました:, error); });並行処理を使用することで、処理全体の所要時間を短縮することができます。実践的な非同期処理の例fetch APIとの組み合わせWeb開発でよく使用される非同期処理の例として、fetch APIを使ったデータ取得があります。fetch APIはPromiseベースで実装されており、非同期でAPI通信を行うことができます。例えば、以下のコードは/api/friends/Sugarから友人の一覧を取得する処理を実装していますvar api /api/friends/; var username Sugar; var promisedFriends fetch(api username) .then(function(res) { return res.json(); }); promisedFriends.then(function(friends) { console.log(friends); // [PYXC-PJ] が表示される });このように、fetch APIとPromiseを組み合わせることで、簡潔かつ効率的に非同期処理を実装することができます。まとめPromiseを活用した非同期処理のポイントJavaScriptの非同期処理において、Promiseは非常に強力なツールです。以下に、Promiseを活用した非同期処理のポイントをまとめますPromiseの基本new Promise()でPromiseを作成し、resolveとrejectで状態を制御するthen/catchメソッドthenで成功時の処理、catchでエラー時の処理を定義する並行処理Promise.allで複数のPromiseを並行して実行し、すべての結果を取得する最速処理Promise.raceで最も速く完了したPromiseの結果を取得する直列処理thenメソッドをチェーンすることで、処理を順番に実行するこれらのポイントを理解し、適切な場面で使い分けることで、効率的な非同期処理を実装することができます。ぜひ実際のプロジェクトでPromiseを活用してみてください非同期処理の練習には、public/stage5/tests.jsにあるサンプルコードが役立ちます。このファイルには、Promiseの基本から応用までの練習問題が含まれています。JavaScriptの非同期処理は初心者にとって難しい概念ですが、Promiseをマスターすることで、より高度なWebアプリケーションの開発が可能になります。ぜひこの記事を参考に、Promiseの使い方を練習してみてください 【免费下载链接】JavaScriptTrainingTraining course repository for JavaScript项目地址: https://gitcode.com/gh_mirrors/ja/JavaScriptTraining创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/11 19:57:52

终极指南:3分钟解决Adobe插件安装难题的免费开源神器

终极指南:3分钟解决Adobe插件安装难题的免费开源神器 【免费下载链接】ZXPInstaller Open Source ZXP Installer for Adobe Extensions 项目地址: https://gitcode.com/gh_mirrors/zx/ZXPInstaller 还在为Adobe插件的复杂安装流程烦恼吗?每次面对…

2026/8/11 19:57:52

企业微信AI客服哪家好?2026AI客服系统选型指南

不少做私域运营、负责客户服务的企业负责人都会有同一个困惑:现在市面上企业微信AI工具这么多,到底该选哪一款?2026年企业微信更新5.0.9版本,上线了免费原生AI助理大圆,与此同时各大官方企业微信服务商也推出了配套AI客…

2026/8/11 19:57:52

HNC 与 Helm 集成:简化多环境命名空间管理的完整方案

HNC 与 Helm 集成:简化多环境命名空间管理的完整方案 【免费下载链接】hierarchical-namespaces Home of the Hierarchical Namespace Controller (HNC). Adds hierarchical policies and delegated creation to Kubernetes namespaces for improved in-cluster mul…

2026/8/11 22:53:02

030、杂光鬼像的根因排查——不是所有flare都来自镜头——从IR截止膜反射到sensor表面微透镜的二次反射——用光路追迹定位鬼像来源的实战方法

030、杂光鬼像的根因排查——不是所有flare都来自镜头——从IR截止膜反射到sensor表面微透镜的二次反射——用光路追迹定位鬼像来源的实战方法 上个月在产线上拿到一颗夜视模组,客户反馈在强逆光场景下,画面中央偏右出现一个淡青色的圆形光斑&#xff0c…

2026/8/11 22:53:02

5分钟掌握EthVM:移动端轻松监控以太坊资产与交易

5分钟掌握EthVM:移动端轻松监控以太坊资产与交易 【免费下载链接】EthVM :zap:EthVM: Open Source Processing Engine and Block Explorer for Ethereum :zap: 项目地址: https://gitcode.com/gh_mirrors/et/EthVM EthVM作为开源的以太坊处理引擎和区块浏览器…

2026/8/11 3:03:40

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 5:34:14

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/11 0:00:39

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:39

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/10 11:20:30

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/11 17:06:59

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/11 3:05:11

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…