提问者:小点点

Async/Await,不推荐使用未处理的promise拒绝


当我使用async await函数时,我得到DeprecationWarning:。此错误可能是由于不带catch块的异步函数内部引发的,或者是由于拒绝了未用。catch()处理的承诺。

export const publish = async (exchange, type, message) => {
        try {
            const connection = await amqplib.connect(connectionString)

            const channel = await connection.createChannel()

            channel.assertExchange(exchange, config.messageQueue.exchange.type, {durable: true})

            logger.silly(`publishing message to ${exchange}`)

            channel.publish(exchange, '', type.encode(message).finish())
        }
        catch (e) {
            logger.warn(`error while publishing message, ${e}`)

            throw e
        }
    }


    const startConsuming = async () => {
        try {
            const {Get, Sort, Cleanup, ...elasticMessages} = expectedMessages

            await init(Object.keys(elasticMessages))

            amqpService(expectedMessages, onMessage)

            publish(`${config.messageQueue.exchange.prefix}Cleanup`, contracts.televic.historyLogging.Call, '')
        } catch (e) {
            logger.error('error while establishing connection to message bus', e)
        }
    }

共1个答案

匿名用户

您前面没有,后面没有:

publish(`${config.messageQueue.exchange.prefix}Cleanup`, contracts.televic.historyLogging.Call, '')`

但是是一个函数,所以这个函数不会抛出错误,但是它返回的承诺会被一个错误拒绝。因此,如果在块中调用,则将因该错误而被拒绝,并且不处理此拒绝。

因此代码必须是这样的:

const startConsuming = async () => {
    try {
        const {Get, Sort, Cleanup, ...elasticMessages} = expectedMessages

        await init(Object.keys(elasticMessages))

        amqpService(expectedMessages, onMessage)

        await publish(`${config.messageQueue.exchange.prefix}Cleanup`, contracts.televic.historyLogging.Call, '')
    } catch (e) {
        logger.error('error while establishing connection to message bus', e)
    }
}