From d192fb918b0e2aa8869de6dcc59de8464b6e879a Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Fri, 11 Dec 2020 18:59:39 -0500 Subject: dump 2020-12-11 --- .../reference/global_objects/promise/all/index.html | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'files/zh-cn/web/javascript/reference/global_objects/promise/all') diff --git a/files/zh-cn/web/javascript/reference/global_objects/promise/all/index.html b/files/zh-cn/web/javascript/reference/global_objects/promise/all/index.html index 84264ce68b..e81f816fbf 100644 --- a/files/zh-cn/web/javascript/reference/global_objects/promise/all/index.html +++ b/files/zh-cn/web/javascript/reference/global_objects/promise/all/index.html @@ -13,9 +13,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all ---
{{JSRef}}
-

Promise.all(iterable) 方法返回一个 {{jsxref("Promise")}} 实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中  promise 有一个失败(rejected),此实例回调失败(reject),失败的原因是第一个失败 promise 的结果。

- -

它通常在启动多个异步任务并发运行并为其结果创建承诺之后使用,以便人们可以等待所有任务完成。

+

Promise.all() 方法接收一个promise的idterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个{{jsxref("Promise")}}实例, 那个输入的所有promise的resolve回调的结果是一个数组。这个{{jsxref("Promise")}}的resolve回调执行是在所有输入的promise的resolve回调都结束,或者输入的iterable里没有promise了的时候。它的reject回调执行是,只要任何一个输入的promise的reject回调执行或者输入不合法的promise就会立即抛出错误,并且reject的是第一个抛出的错误信息。

{{EmbedInteractiveExample("pages/js/promise-all.html")}}
@@ -23,7 +21,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all

语法

-
Promise.all(iterable);
+
Promise.all(iterable);

参数

@@ -58,7 +56,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all

Promise.all 等待所有都完成(或第一个失败)。

-
var p1 = Promise.resolve(3);
+
var p1 = Promise.resolve(3);
 var p2 = 1337;
 var p3 = new Promise((resolve, reject) => {
   setTimeout(resolve, 100, 'foo');
@@ -70,7 +68,7 @@ Promise.all([p1, p2, p3]).then(values => {
 
 

如果参数中包含非 promise 值,这些值将被忽略,但仍然会被放在返回数组中(如果 promise 完成的话):

-
// this will be counted as if the iterable passed is empty, so it gets fulfilled
+
// this will be counted as if the iterable passed is empty, so it gets fulfilled
 var p = Promise.all([1,2,3]);
 // this will be counted as if the iterable passed contains only the resolved promise with value "444", so it gets fulfilled
 var p2 = Promise.all([1,2,3, Promise.resolve(444)]);
@@ -93,7 +91,7 @@ setTimeout(function(){
 
 

下面的例子中演示了 Promise.all 的异步性(如果传入的可迭代对象是空的,就是同步):

-
// we are passing as argument an array of promises that are already resolved,
+
// we are passing as argument an array of promises that are already resolved,
 // to trigger Promise.all as soon as possible
 var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
 
@@ -115,7 +113,7 @@ setTimeout(function(){
 
 

如果 Promise.all 失败,也是一样的:

-
var mixedPromisesArray = [Promise.resolve(33), Promise.reject(44)];
+
var mixedPromisesArray = [Promise.resolve(33), Promise.reject(44)];
 var p = Promise.all(mixedPromisesArray);
 console.log(p);
 setTimeout(function(){
@@ -131,7 +129,7 @@ setTimeout(function(){
 
 

但是,Promise.all 当且仅当传入的可迭代对象为空时为同步:

-
var p = Promise.all([]); // will be immediately resolved
+
var p = Promise.all([]); // will be immediately resolved
 var p2 = Promise.all([1337, "hi"]); // non-promise values will be ignored, but the evaluation will be done asynchronously
 console.log(p);
 console.log(p2)
@@ -151,7 +149,7 @@ setTimeout(function(){
 
 

Promise.all 在任意一个传入的 promise 失败时返回失败。例如,如果你传入的 promise中,有四个 promise 在一定的时间之后调用成功函数,有一个立即调用失败函数,那么 Promise.all 将立即变为失败。

-
var p1 = new Promise((resolve, reject) => {
+
var p1 = new Promise((resolve, reject) => {
   setTimeout(resolve, 1000, 'one');
 });
 var p2 = new Promise((resolve, reject) => {
-- 
cgit v1.2.3-54-g00ecf