前几天的一场面试中,面试官问了我这样一道问题,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 值时,它们会被视为已经完成的值,并作为一个数组返回给你。