一个解决方法是使用Promise.all()
和Array.map()
方法。首先,使用Array.map()
方法遍历函数数组,并使用条件判断来确定哪些函数返回Promise。然后,将返回Promise的函数使用Promise.all()
方法进行处理,以等待所有Promise都解决。最后,将结果与不返回Promise的函数的结果合并起来。
下面是一个示例代码:
function someFunctionReturningPromise() {
return new Promise((resolve, reject) => {
// Promise的逻辑
});
}
function someFunctionNotReturningPromise() {
// 非Promise的逻辑
}
const functionArray = [someFunctionReturningPromise, someFunctionNotReturningPromise, someFunctionReturningPromise];
function executeFunctions(functions) {
const promiseFunctions = functions.filter(fn => fn instanceof Function && fn().constructor === Promise);
const nonPromiseFunctions = functions.filter(fn => fn instanceof Function && fn().constructor !== Promise);
const promiseResults = Promise.all(promiseFunctions.map(fn => fn()));
return Promise.all([promiseResults, ...nonPromiseFunctions.map(fn => fn())]);
}
executeFunctions(functionArray)
.then(results => {
const [promiseResults, ...nonPromiseResults] = results;
console.log('Promise Results:', promiseResults);
console.log('Non-Promise Results:', nonPromiseResults);
})
.catch(error => {
console.error(error);
});
在上面的示例中,someFunctionReturningPromise
和someFunctionNotReturningPromise
分别是一个返回Promise和一个不返回Promise的函数。functionArray
是一个包含这些函数的数组。然后,executeFunctions
函数遍历functionArray
,将返回Promise的函数存储在promiseFunctions
数组中,将不返回Promise的函数存储在nonPromiseFunctions
数组中。
接下来,executeFunctions
函数使用Promise.all()
方法和Array.map()
方法处理promiseFunctions
数组,以等待所有Promise都解决。最后,使用Promise.all()
方法将Promise的结果与不返回Promise的函数的结果合并到一个数组中,并返回这个Promise。
在示例中,我们使用.then()
方法来处理Promise的结果,并将结果打印到控制台上。如果有任何错误发生,则使用.catch()
方法捕获错误并将错误打印到控制台上。