ERR_UNHANDLED_REJECTION 在 promise 对象数组中等待时出现 UnhandledPromiseRejection
ERR_UNHANDLED_REJECTION UnhandledPromiseRejection when awaited inside an array of promise Objects
我正在尝试理解带有 promises 和 for..of 循环的异步等待。我有一个函数,它通过解析传递给它的偶数和拒绝传递给它的奇数来生成承诺。在一个异步函数中,我试图等待但得到 UnhandledPromiseRejection,即使我正在捕获错误。
我的问题是我遗漏了什么要点。为什么我收到 UnhandledPromiseRejection 以及如何处理它。我需要概念性信息
function genPromise(value) {
return new Promise((resolve, reject) => {
if (value % 2) {
resolve(`The value ${value} is odd`);
} else {
reject(`The value ${value} is even`);
}
})
}
(async function () {
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let y = x.map(d => genPromise(d))
try {
for await (let k of y) {
console.log(k);
}
} catch (err) {
console.log(err)
}
})();
for await(
仅适用于异步迭代。您没有异步可迭代 - 只有普通可迭代,在这种情况下它等同于 for..of
:
for (const k of y) {
console.log(k);
}
k
承诺未被捕获,因此被拒绝。
在循环内等待 k
,没有 for await
:
function genPromise(value) {
return new Promise((resolve, reject) => {
if (value % 2) {
resolve(`The value ${value} is odd`);
} else {
reject(`The value ${value} is even`);
}
})
}
(async function () {
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let y = x.map(d => genPromise(d))
try {
for (const k of y) {
console.log(await k);
}
} catch (err) {
console.log('error', err)
}
})();
如果你想从数字数组中创建一个异步可迭代对象,那么你可以这样做:
function* genPromise(arr) {
for (const value of arr) {
yield new Promise((resolve, reject) => {
if (value % 2) {
resolve(`The value ${value} is odd`);
} else {
reject(`The value ${value} is even`);
}
});
}
}
(async function () {
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
try {
for await (const k of genPromise(arr)) {
console.log(k);
}
} catch (err) {
console.log('error', err)
}
})();
我正在尝试理解带有 promises 和 for..of 循环的异步等待。我有一个函数,它通过解析传递给它的偶数和拒绝传递给它的奇数来生成承诺。在一个异步函数中,我试图等待但得到 UnhandledPromiseRejection,即使我正在捕获错误。 我的问题是我遗漏了什么要点。为什么我收到 UnhandledPromiseRejection 以及如何处理它。我需要概念性信息
function genPromise(value) {
return new Promise((resolve, reject) => {
if (value % 2) {
resolve(`The value ${value} is odd`);
} else {
reject(`The value ${value} is even`);
}
})
}
(async function () {
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let y = x.map(d => genPromise(d))
try {
for await (let k of y) {
console.log(k);
}
} catch (err) {
console.log(err)
}
})();
for await(
仅适用于异步迭代。您没有异步可迭代 - 只有普通可迭代,在这种情况下它等同于 for..of
:
for (const k of y) {
console.log(k);
}
k
承诺未被捕获,因此被拒绝。
在循环内等待 k
,没有 for await
:
function genPromise(value) {
return new Promise((resolve, reject) => {
if (value % 2) {
resolve(`The value ${value} is odd`);
} else {
reject(`The value ${value} is even`);
}
})
}
(async function () {
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let y = x.map(d => genPromise(d))
try {
for (const k of y) {
console.log(await k);
}
} catch (err) {
console.log('error', err)
}
})();
如果你想从数字数组中创建一个异步可迭代对象,那么你可以这样做:
function* genPromise(arr) {
for (const value of arr) {
yield new Promise((resolve, reject) => {
if (value % 2) {
resolve(`The value ${value} is odd`);
} else {
reject(`The value ${value} is even`);
}
});
}
}
(async function () {
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
try {
for await (const k of genPromise(arr)) {
console.log(k);
}
} catch (err) {
console.log('error', err)
}
})();