From ba1559ded1f34affc485e07cedc7ce6a0cee4523 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 23 Jan 2022 21:41:40 +0900 Subject: 2021/07/21 時点の英語版に同期 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reference/global_objects/promise/race/index.md | 200 ++++++++++++--------- 1 file changed, 116 insertions(+), 84 deletions(-) (limited to 'files') diff --git a/files/ja/web/javascript/reference/global_objects/promise/race/index.md b/files/ja/web/javascript/reference/global_objects/promise/race/index.md index ed5e913f87..d831afb204 100644 --- a/files/ja/web/javascript/reference/global_objects/promise/race/index.md +++ b/files/ja/web/javascript/reference/global_objects/promise/race/index.md @@ -4,86 +4,88 @@ slug: Web/JavaScript/Reference/Global_Objects/Promise/race tags: - ECMAScript 2015 - JavaScript - - Method - - Promise - - Reference - メソッド + - Promise + - リファレンス +browser-compat: javascript.builtins.Promise.race translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race --- -
{{JSRef}}
- -

Promise.race() メソッドは、反復可能オブジェクトの中の Promise のうちの1つが解決または拒否するとすぐに、その Promise の値または理由で解決または拒否する Promise を返します。

+{{JSRef}} -
{{EmbedInteractiveExample("pages/js/promise-race.html", "taller")}}
+**`Promise.race()`** メソッドは、反復可能オブジェクトの中のプロミスのうちの 1 つが履行されるか拒否されると、そのプロミスの値または理由で履行または拒否されるプロミスを返します。 - +{{EmbedInteractiveExample("pages/js/promise-race.html", "taller")}} -

構文

+## 構文 -
Promise.race(iterable);
+```js +Promise.race(iterable); +``` -

引数

+### 引数 -
-
iterable
-
{{jsxref("Array")}} のような反復可能なオブジェクト。 iterable を確認してください。
-
+- `iterable` + - : 配列 ({{jsxref("Array")}}) などの反復可能なオブジェクト。[反復可能](/ja/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol)を確認してください。 -

返値

+### 返値 -

待ち状態の {{jsxref("Promise")}} で、反復可能オブジェクトの中で最初に解決または拒否した Promise の値を非同期に産出します。

+**待ち状態の** {{jsxref("Promise")}} で、反復可能オブジェクトの中で最初に履行または解決されたプロミスの値を**非同期に**産出します。 -

説明

+## 解説 -

race 関数は、引数として渡された反復可能オブジェクトの中にある複数の Promise の中で解決する最初の Promise と同じ方法で解決される (同じ値を取る) Promise を返します。

+`race` 関数は、引数として渡された反復可能オブジェクトの中にある複数のプロミスの中で決定した最初のプロミスと同じ方法で決定される(同じ値を取る)プロミスを返します。 -

渡された反復可能オブジェクトが空の場合、返される Promise はずっと待ち状態のままです。

+渡された反復可能オブジェクトが空の場合、返されるプロミスは永遠に待機状態のままです。 -

反復可能オブジェクトに1つ以上の Promise 以外の値やすでに解決済みの Promise が含まれていた場合、 Promise.race は反復可能オブジェクトの中で見つけたこれらの値の内の最初の一つで解決します。

+反復可能オブジェクトに 1 つ以上のプロミス以外の値やすでに決定済みのプロミスが含まれていた場合、 `Promise.race` は反復可能オブジェクトの中で見つけたこれらの値の内の最初の一つで解決します。 -

+## 例 -

Promise.race の非同期性

+### Promise.race の非同期性 -

以下の例は、 Promise.race の非同期性を示しています。

+以下の例は、 `Promise.race` の非同期性を示しています。 -
// we are passing as argument an array of promises that are already resolved,
-// to trigger Promise.race as soon as possible
+```js
+// Promise.rac eをできるだけ早く起動させるために、解決済みのプロミスの配列を
+// 引数として渡しています。
 var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
 
 var p = Promise.race(resolvedPromisesArray);
-// immediately logging the value of p
+// 直ちに p の値を出力
 console.log(p);
 
-// using setTimeout we can execute code after the stack is empty
+// setTimeout を使用すると、スタックが空になった後でコードが実行される
 setTimeout(function(){
-    console.log('the stack is now empty');
+    console.log('スタックが空です');
     console.log(p);
 });
 
 // logs, in order:
-// Promise { <state>: "pending" }
-// the stack is now empty
-// Promise { <state>: "fulfilled", <value>: 33 }
+// Promise { : "pending" } +// スタックが空です +// Promise { : "fulfilled", : 33 } +``` -

空の反復可能オブジェクトを渡すと、無限に解決しない Promise が返されます。

+空の反復可能オブジェクトを渡すと、無限に解決しないプロミスが返されます。 -
var foreverPendingPromise = Promise.race([]);
+```js
+var foreverPendingPromise = Promise.race([]);
 console.log(foreverPendingPromise);
 setTimeout(function(){
-    console.log('the stack is now empty');
+    console.log('スタックが空です');
     console.log(foreverPendingPromise);
 });
 
-// logs, in order:
-// Promise { <state>: "pending" }
-// the stack is now empty
-// Promise { <state>: "pending" }
-
+// ログ(順番に): +// Promise { : "pending" } +// スタックが空です +// Promise { : "pending" } +``` -

反復可能オブジェクトの中に1つ以上の Promise 以外の値や、すでに解決した Promise が含まれていると、 Promise.race は配列の中で見つかった最初のこれらの値で解決します。

+反復可能オブジェクトの中に 1 つ以上のプロミス以外の値や、すでに解決したプロミスが含まれていると、 `Promise.race` は配列の中で見つかった最初のこれらの値で解決します。 -
var foreverPendingPromise = Promise.race([]);
+```js
+var foreverPendingPromise = Promise.race([]);
 var alreadyFulfilledProm = Promise.resolve(100);
 
 var arr = [foreverPendingPromise, alreadyFulfilledProm, "non-Promise value"];
@@ -94,87 +96,117 @@ var p2 = Promise.race(arr2);
 console.log(p);
 console.log(p2);
 setTimeout(function(){
-    console.log('the stack is now empty');
+    console.log('スタックが空です');
     console.log(p);
     console.log(p2);
 });
 
-// logs, in order:
-// Promise { <state>: "pending" }
-// Promise { <state>: "pending" }
-// the stack is now empty
-// Promise { <state>: "fulfilled", <value>: 100 }
-// Promise { <state>: "fulfilled", <value>: "non-Promise value" }
-
+// ログ(順番に) +// Promise { : "pending" } +// Promise { : "pending" } +// スタックが空です +// Promise { : "fulfilled", : 100 } +// Promise { : "fulfilled", : "non-Promise value" } +``` -

Promise.race の使用 – setTimeout を使用した例

+### Promise.race の使用 – setTimeout を使用した例 -
var p1 = new Promise(function(resolve, reject) {
-    setTimeout(() => resolve('one'), 500);
+```js
+var p1 = new Promise(function(resolve, reject) {
+    setTimeout(() => resolve('one'), 500);
 });
 var p2 = new Promise(function(resolve, reject) {
-    setTimeout(() => resolve('two'), 100);
+    setTimeout(() => resolve('two'), 100);
 });
 
 Promise.race([p1, p2])
 .then(function(value) {
   console.log(value); // "two"
-  // Both fulfill, but p2 is faster
+  // 両方が履行されるが、 p2 の方が早い
 });
 
 var p3 = new Promise(function(resolve, reject) {
-    setTimeout(() => resolve('three'), 100);
+    setTimeout(() => resolve('three'), 100);
 });
 var p4 = new Promise(function(resolve, reject) {
-    setTimeout(() => reject(new Error('four')), 500);
+    setTimeout(() => reject(new Error('four')), 500);
 });
 
 Promise.race([p3, p4])
 .then(function(value) {
   console.log(value); // "three"
-  // p3 is faster, so it fulfills
-}, function(reason) {
+  // p3 の方が早いので、履行される
+}, function(error) {
   // Not called
 });
 
 var p5 = new Promise(function(resolve, reject) {
-    setTimeout(() => resolve('five'), 500);
+    setTimeout(() => resolve('five'), 500);
 });
 var p6 = new Promise(function(resolve, reject) {
-    setTimeout(() => reject(new Error('six')), 100);
+    setTimeout(() => reject(new Error('six')), 100);
 });
 
 Promise.race([p5, p6])
 .then(function(value) {
-  // Not called
+  // 呼び出されない
 }, function(error) {
   console.log(error.message); // "six"
-  // p6 is faster, so it rejects
+  // p6 の方が早いので、拒否される
+});
+```
+
+### Promise.any との比較
+
+`Promise.race` は最初に決定された {{jsxref("Promise")}} を取ります。
+
+```js
+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) => {
+  // Only promise1 is fulfilled, but promise2 is faster
+  console.log('failed with reason:', reason);
+});
+// 期待される出力: "failed with reason: two"
+```
+
+{{jsxref("Promise.any")}} は最初に履行された {{jsxref("Promise")}} を取ります。
+
+```js
+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.log('failed with reason:', reason);
 });
-
+// 期待される出力: "succeeded with value: one" +``` -

仕様書

+## 仕様書 - - - - - - - - - - - -
仕様書
{{SpecName('ESDraft', '#sec-promise.race', 'Promise.race')}}
+{{Specifications}} -

ブラウザーの互換性

+## ブラウザーの互換性 -

{{Compat("javascript.builtins.Promise.race")}}

+{{Compat}} -

関連情報

+## 関連情報 -
    -
  • {{jsxref("Promise")}}
  • -
  • {{jsxref("Promise.all()")}}
  • -
+- {{jsxref("Promise")}} +- {{jsxref("Promise.all()")}} -- cgit v1.2.3-54-g00ecf