面试题:promise.all数组中传的不是promise对象,返回什么?

当Promise.all()接收到非Promise值时,这些值会被转换为已解析的Promise,视为已完成,并在结果数组中保留原值。如果数组中有任何被拒绝的Promise,整个Promise.all()会立即拒绝。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天的一场面试中,面试官问了我这样一道问题,promise.all数组中传入的不是promise对象,返回的是什么,我心想,我可从来没这样用过啊。

        当使用 Promise.all() 方法时,传递给它的数组中的每个元素可以是 Promise 对象,也可以是其他类型的值。这些值会被隐式地转换为 Promise 对象,然后被 Promise.all() 处理。

如果传递给 Promise.all() 的数组中的元素不是 Promise 对象,它们将被视为已经完成的值。在这种情况下,Promise.all() 返回一个立即被解析的 Promise,其结果是一个包含传递的非 Promise 值的数组。

以下是一个示例,展示了传递给 Promise.all() 的数组中包含非 Promise 值的情况:

const promise1 = Promise.resolve('Resolved Promise 1');
const promise2 = 'Non-Promise Value';
const promise3 = Promise.resolve('Resolved Promise 3');

Promise.all([promise1, promise2, promise3])
  .then(function(result) {
    console.log(result);
  })
  .catch(function(error) {
    console.error(error);
  });

在这个例子中,promise2 是一个非 Promise 值。Promise.all() 会将其隐式转换为 Promise 对象,并将其视为已经完成的值。因此,Promise.all() 返回一个包含所有传递值的数组:

[ 'Resolved Promise 1', 'Non-Promise Value', 'Resolved Promise 3' ]

需要注意的是,如果传递给 Promise.all() 的数组中的任何一个元素是一个拒绝的 Promise,那么整个 Promise.all() 调用将立即被拒绝,并返回拒绝的原因。在这种情况下,catch 方法将会捕获到拒绝的原因。

总结而言,当在 Promise.all() 中传递非 Promise 值时,它们会被视为已经完成的值,并作为一个数组返回给你。

前端面试中,Promise.all()一个常见的问题。它是一个用于处理多个 Promise 对象的方法,返回一个新的 Promise 对象。根据引用所述,Promise.all() 方法接收一个 promise 的 iterable 类型的输入(例如数组),并且只返回一个 Promise 实例。当所有输入的 promise成功执行时,Promise.all() 返回Promise 对象的 resolve 回调会一个包含所有 promise 结果的数组。如果输入的 promise 中有任何一个败或者输入不合法的 promisePromise.all() 返回Promise 对象的 reject 回调会立即抛出错误,并且 reject 的是第一个抛出的错误信息[^2]。 以下是一个示例,演示了如何使用 Promise.all() 方法: ```javascript const promise1 = Promise.resolve(3); const promise2 = 42; const promise3 = new Promise((resolve, reject) => { setTimeout(resolve, 100, 'foo'); }); Promise.all([promise1, promise2, promise3]) .then(values => { console.log(values); // 输出:[3, 42, 'foo'] }) .catch(error => { console.error(error); // 如果有任何一个 promise 败,会立即抛出错误 }); ``` 在上面的示例中,我们创建了三个 Promise 对象promise1、promise2 和 promise3。promise1 是一个已经解决的 Promisepromise2 是一个普通的值,promise3 是一个在 100 毫秒后解决的 Promise。我们将这三个 Promise 对象作为参数递给 Promise.all() 方法。当所有的 Promise成功执行时,Promise.all() 返回Promise 对象的 resolve 回调会一个包含所有 promise 结果的数组。在这个示例中,我们通过 then() 方法获取到了这个数组,并将其打印出来。如果有任何一个 Promise 败,Promise.all() 返回Promise 对象的 reject 回调会立即抛出错误,并且 reject 的是第一个抛出的错误信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值