Javascript 在数据库中进行异步多次更新
我有一个要插入数据库的元素数组。对于每个元素,我必须检查它们的完整性(如果找不到元素,我会发送“错误请求”): 我以下面“3)段为例: 这个技巧适用于我代码的其他部分中的许多用例,但不适用于这个特定的用例。我有一个错误:Javascript 在数据库中进行异步多次更新,javascript,node.js,postgresql,async-await,Javascript,Node.js,Postgresql,Async Await,我有一个要插入数据库的元素数组。对于每个元素,我必须检查它们的完整性(如果找不到元素,我会发送“错误请求”): 我以下面“3)段为例: 这个技巧适用于我代码的其他部分中的许多用例,但不适用于这个特定的用例。我有一个错误: const r = await nextAsyncFunction(); TypeError: nextAsyncFunction is not a function 我不知道为什么。如果有人能帮我一把,
const r = await nextAsyncFunction();
TypeError: nextAsyncFunction is not a function
我不知道为什么。如果有人能帮我一把,那就太好了:)错误消息是正确的,
reduce
的第二个参数是要减少的数组的下一个条目,在这种情况下是promises
数组
因此,最直接的解决办法是等待承诺,而不是试图称之为:
const r = await nextAsyncFunction; // no () on the end
为什么使用nextAsyncFunction
名称而不是nextPromise
或其变体是不言而喻的-这肯定会造成混淆并导致错误
除此之外,似乎还有一些bug等待发生:
- 如果发送了
消息,则代码将继续执行,并尝试更新数据库,并解决“错误请求”
函数推送的承诺。随后,forEach
在尝试发送第二组响应头时将(很可能?)出错。尝试执行res.send(ret)
错误,并在promise错误请求
处理程序中捕获该错误,以发送catch
响应400
- 在执行之前,不会尝试等待异步处理完成
如果成功,将发送一个空数组res.send(ret)
reduce(async(previousPromise,nextPromise)
构造是一种相当复杂的方法,通过使用for…of
来等待承诺依次得到解决:
(async function() {
for( promise of promises) {
ret.push( await promise);
}
}()
.then( ()=> res.send(ret));
.catch( ()=> // server error response?
处理由有效和无效的
pj
请求值混合而成的请求可能需要进一步注意。错误消息是正确的,reduce
的第二个参数是要减少的数组的下一个条目,在这种情况下是数组
因此,最直接的解决办法是等待承诺,而不是试图称之为:
const r = await nextAsyncFunction; // no () on the end
为什么使用nextAsyncFunction
名称而不是nextPromise
或其变体是不言而喻的-这肯定会造成混淆并导致错误
除此之外,似乎还有一些bug等待发生:
- 如果发送了
“错误请求”
消息,则代码将继续执行并尝试更新数据库,并解决forEach
函数推送的承诺。随后res.send(ret)
将(很可能?)尝试发送第二组响应头时出错。请尝试发送错误请求
错误,并在承诺捕获
处理程序中捕获该错误,以发送400
响应
- 在执行之前,不会尝试等待异步处理完成
res.send(ret)
如果成功,将发送一个空数组
reduce(async(previousPromise,nextPromise)
构造是一种相当复杂的方法,通过使用for…of
来等待承诺依次得到解决:
(async function() {
for( promise of promises) {
ret.push( await promise);
}
}()
.then( ()=> res.send(ret));
.catch( ()=> // server error response?
处理由有效和无效的pj
请求值混合而成的请求可能需要进一步注意。您是否尝试过for..of
循环?for(让pj of req.body.pjs){wait things}
我没有,但我要记住,有时候我只是做一些无用的复杂的事情…traktor53的解释帮助我解决了我的问题。谢谢Matt!你试过for..of
循环吗?for(让pj of req.body.pjs){等待事情}
我没有,但我要记住,有时候我只是做一些无用的复杂的事情……traktor53的解释帮助我解决了问题。谢谢Matt!谢谢你的评论。你说得对,我需要进一步注意处理一些特定案例,这在我的路线图上,但我首先想了解为什么p出现了问题,您的解释非常全面。再次感谢:)@DJ9114我发现,如链接博客所示,等待承诺按创建顺序兑现的用例有点做作,当所有承诺的结果都是令人感兴趣的时候,这将是一个更好、更标准的选择。编码愉快。谢谢你的评论。你说得对,我需要在tention需要处理一些具体案例,这在我的路线图上,但我首先想了解问题发生的原因,您的解释非常全面。再次感谢:)@djcaesar9114我找到了等待承诺按照创建顺序兑现的用例,如链接博客所示,是有点做作的,当所有承诺的结果都令人感兴趣时,这将是一个更好、更标准的选择。快乐编码。