gpt4 book ai didi

javascript - 异步/等待错误被绑定(bind)函数吞没

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:39 27 4
gpt4 key购买 nike

我正在运行一个使用 async/await 的 Express 应用程序。

我有两条如下所示的路线:

app.post('/add-item', item.bind(null, 'add'))
app.post('/remove-item', item.bind(null, 'remove'))

路由处理程序定义如下:

async function item (action, req, res, next) {
if (action === 'add') {
var result = await addItemFromDB()
res.json(result)
} else {
var result = await removeItemFromDB()
res.json(result)
}
}

因为我想避免将 addItemFromDBremoveItemFromDB 函数包装在 try/catch 中,所以我将其包装在辅助函数 asyncRequest 中:

asyncRequest(async function item(req, res, next) {
if (action === 'add') {
var result = await addItemFromDB()
res.json(result)
} else {
var result = await removeItemFromDB()
res.json(result)
}
})

asyncRequest定义为:

function asyncRequest (handler) {
return function (req, res, next) {
return handler(req, res, next).catch(next)
}
}

但是,addItemFromDBremoveItemFromDB 中发生的所有错误都会被默默吞掉。我发现,当我删除 .bind(null, 'add') 等时,一切都会按预期工作。

有什么想法可以解释为什么会出现这种情况吗?

最佳答案

你必须使用

app.post('/add-item', asyncRequest(item.bind(null, 'add')));
app.post('/remove-item', asyncRequest(item.bind(null, 'remove)));

可能您尝试在带有 4 个参数的自定义 item 函数上调用 asyncRequest,这不是 asyncRequest 函数所期望的处理程序参数。

关于javascript - 异步/等待错误被绑定(bind)函数吞没,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40038555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com