JS 的 promise.then().catch() 的 python 任务等价物是什么?

这为将来添加了一个成功/错误处理程序,例如:


async function send(item) {

    // ...

}


for (const item of items) {

    const sendPromise = send(item);

    sendPromise

        .then(x => console.log(x))

        .catch(x => console.error(x))

}

而不是像这样等待:


for (const item of items) {

    const sendPromise = send(item);

    try {

        const x = await sendPromise

        console.log(x)

    } catch (e) {

        console.error(e)

    }

}

python的Task相当于JS的promise.then()没有等待吗?


async def send(item):

    pass


for item of items:

    send_coro = send(item)

    send_task = asyncio.create_task(send_coro)

    # ?????

}


慕哥9229398
浏览 115回答 1
1回答

慕田峪9158850

如果我正确阅读了 JavaScript,它会为将来添加一个错误处理程序。直译应该是这样的:def _log_err(fut):    if fut.exception() is not None:        print(f'error: {fut.exception()}')for item in items:    send_future = asyncio.create_task(send(item))    send_future.add_done_callback(_log_err)请注意,上面不是惯用的,因为它诉诸回调并且不如原始 JavaScript 优雅,其中then并catch返回很好地链接的新期货。更好的方法是使用辅助协程来托管await. 这不需要外部函数是async def,因此相当于上面的:async def _log_err(aw):    try:        return await aw    except Exception as e:        print(f'error: {e}')for item in items:    asyncio.create_task(_log_err(send(item)))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python