首页 > 试题广场 >

下面关于Promise的all方法说法错误的是(

[单选题]
下面关于Promise的all方法说法错误的是( )
  • promise.all(iterable),参数是一个数组
  • 只有这个数组中的所有promise实例都resolve之后才会触发其返回的promise实例的then
  • 只要其中有任何一个promise实例被reject,那么最终的promise实例将触发catch
  • 触发then时可以只带上iterable参数中的部分值,也可以带所有值。

iterable是一个全部为promise对象的数组,只要数组中有一个promise实例被reject,那么最终的promise触发catch,只有数组中全部promise实例都resolve才会触发then,并且要带上iterable中全部promise,其中promise实例将会被结果代替

发表于 2017-02-25 12:13:23 回复(0)
该题目有误,A选项是错误的,Promise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise实例
发表于 2021-05-11 23:56:35 回复(0)
这个方法返回一个新的promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息。Promise.all方法常被用于处理多个promise对象的状态集合。-----MDN
编辑于 2021-07-20 08:57:07 回复(0)

完成要返回所有,失败一个就结束。

A.参数是iterable,一个可迭代对象,如 ArrayString

BD. 完成(Fulfillment):完成状态的结果都是一个数组,它包含所有的传入迭代参数对象的值。

C.失败/拒绝(Rejection):传入的 promise 中有一个失败,异步回调,不管其他的。

编辑于 2022-07-18 16:45:02 回复(0)
参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例
发表于 2022-08-23 06:07:45 回复(0)
选项B不太严谨。触发promise实例对象的then方法既可以是数组中所有对象resolve也可以是其中一个对象reject。当then方法既接收成功的参数又接收失败的参数的时候,all方法数组里即便存在失败的promise对象也会触发then 方法中失败的回调函数。并且当catch和then中失败的函数参数同时存在的时候,失败时优先执行then方法中失败的回调函数。
发表于 2022-03-28 16:58:25 回复(0)
JS内容
发表于 2017-04-06 15:10:03 回复(0)
ABC没错吗,A参数是可迭代对象,B then方法不是立刻调用的吗,C then也能捕获reject啊
编辑于 2023-12-20 11:12:34 回复(0)
then不是有两个参数嘛,错误了不会触发第二个参数?
发表于 2023-05-31 09:26:23 回复(0)
明显B与D矛盾,B与C同时成立
发表于 2022-09-29 16:17:18 回复(0)
看不懂哇看不懂
发表于 2022-01-14 09:28:55 回复(0)
没看见catch
发表于 2021-07-20 08:54:39 回复(0)
答案错了吧?首先A中的不仅仅是数组,是iterable,更为宽泛的概念。
然后D的话,带部分值可以是这样。用数组解包
var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("foo");
  }, 100);
});

Promise.all([p1, p2, p3]).then(([v1, , v2]) => {
  console.log(v1, v2); // 3 "foo"
});


发表于 2021-07-07 19:31:59 回复(0)