javascript - ERR_UNHANDLED_REJECTION 在 Promise 对象数组中等待时出现 UnhandledPromiseRejection

标签 javascript async-await es6-promise

我试图理解异步等待与 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/

相关文章:

javascript - React dropzone 图像未显示在模板上

.net - 在 WCF 服务中使用 async/await 时,OperationContext.Current 在第一次等待后为空

c# - 限制没有。每秒由 Dns.BeginGetHostEntry 方法生成的请求数或使用任务并行库 (TPL)

javascript - Promise 链接相同的函数

javascript - Mocha 超时后 Promise 解决

javascript - Bootstrap 下拉菜单未打开,首先单击 React 16

javascript - 使用 html anchor (#) 强制重新加载页面 - HTML 和 JS

node.js - 无法在 Cloud9 上的 Node 上创建异步方法

javascript - 如何在 javascript promise 中进行 3 次提取?

javascript - Owl Carousel 导航箭头造型