const promiseAllAsyncAwait = async function() {
if (!arguments.length) {
return null;
}
let args = arguments;
if (args.length === 1 && Array.isArray(args[0])) {
args = args[0];
}
const total = args.length;
const result = [];
for (let i = 0; i < total; i++) {
try {
const res = await Promise.resolve(args[i]);
if (res) {
result.push(res);
}
} catch (err) {
console.log(123);
return err;
}
}
return result;
};
const asyncTask1 = new Promise((resolve) => setTimeout(() => resolve('Task 1'), 1000));
const asyncTask2 = new Promise((resolve, reject) => setTimeout(() => reject('Error in Task 2'), 500));
const asyncTask3 = new Promise((resolve) => setTimeout(() => resolve('Task 3'), 1500));
(async () => {
try {
const results = await promiseAllAsyncAwait([asyncTask1, asyncTask2, asyncTask3]);
console.log(results);
} catch (error) {
console.error('Error in promiseAllAsync:', error);
}
})();
它应该向控制台输出123,但它没有输出。 它只是输出此错误“[UnhandledPromiseRejection:此错误是由于在没有 catch 块的情况下抛出异步函数内部,或者拒绝未使用 .catch() 处理的承诺而引起的。该 Promise 被拒绝,原因是“任务 2 中出现错误”。] { 代码:'ERR_UNHANDLED_REJECTION' }'
您应该在 PromiseAllAsyncAwait 函数内的 catch 块中抛出错误,而不是返回它。
const promiseAllAsyncAwait = async function() {
if (!arguments.length) {
return null;
}
let args = arguments;
if (args.length === 1 && Array.isArray(args[0])) {
args = args[0];
}
const total = args.length;
const result = [];
for (let i = 0; i < total; i++) {
try {
const res = await Promise.resolve(args[i]);
if (res) {
result.push(res);
}
} catch (err) {
console.log(123);
throw err; // Throw the error instead of returning it
}
}
return result;
};
const asyncTask1 = new Promise((resolve) => setTimeout(() => resolve('Task 1'), 1000));
const asyncTask2 = new Promise((resolve, reject) => setTimeout(() => reject('Error in Task 2'), 500));
const asyncTask3 = new Promise((resolve) => setTimeout(() => resolve('Task 3'), 1500));
(async () => {
try {
const results = await promiseAllAsyncAwait([asyncTask1, asyncTask2, asyncTask3]);
console.log(results);
} catch (error) {
console.error('Error in promiseAllAsync:', error);
}
})();