我试图理解异步等待与 promise 和 for..of 循环。我有一个函数,它通过解析是否将偶数传递给它以及拒绝是否将奇数传递给它来生成 promise 。在异步函数中,我正在等待,但即使我捕获了错误,也得到了 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 wait(
仅适用于异步迭代。您没有异步迭代 - 只有普通迭代,在这种情况下,它相当于 for..of
:
for (const k of y) {
console.log(k);
}
k
promise 没有被捕获,因此被拒绝。
在循环内等待k
,没有forawait
:
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)
}
})();
关于javascript - ERR_UNHANDLED_REJECTION 在 Promise 对象数组中等待时出现 UnhandledPromiseRejection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68062762/