在TypeScript中等待Foreach给出错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在TypeScript中等待Foreach给出错误相关的知识,希望对你有一定的参考价值。
我在Express JS中进行了JS开发,我们正在将应用程序迁移到TypeOrm的Typescript。
async function loadRootMessagesForTwitter(req, res)
{
const messageRepository = getManager().getRepository(Message);
req.body.forEach(function(obj) {
const requestMessage = messageRepository.create(obj);
var channel_message_ID = requestMessage['channel_message_ID'];
if (channel_message_ID) {
await messageRepository.save(requestMessage);
}
}
我面临以下错误
error TS1308: 'await' expression is only allowed within an async function
答案
传递给forEach
的函数必须是async
:
req.body.forEach(async function(obj) {
// ...
await messageRepository.save(requestMessage);
});
另一答案
为什么不这样做?
async function loadRootMessagesForTwitter(req, res) {
const messageRepository = getManager().getRepository(Message);
const arr = req.body;
for(let i=0;i<arr.length;i++) {
let obj = arr[i]
const requestMessage = messageRepository.create(obj);
let channel_message_ID = requestMessage['channel_message_ID'];
if (channel_message_ID) {
await messageRepository.save(requestMessage);
}
}
}
另一答案
如果你想确保在进行循环的下一次迭代之前等待每个forEach
调用完成,那么简单地使用带有异步回调的save()
就不起作用了。在这种情况下,这可能无关紧要,因为你忽略了save()
调用的任何结果,也许你可以抛出一堆对save()
的调用,在这种情况下简单地说:
const messageRepository = getManager().getRepository(Message);
req.body.forEach(function(obj) {
const requestMessage = messageRepository.create(obj);
var channel_message_ID = requestMessage['channel_message_ID'];
if (channel_message_ID) {
messageRepository.save(requestMessage);
}
}
但是,如果你想控制调用,那么只需停止使用forEach
并使用typescript的for...of
代替:
const messageRepository = getManager().getRepository(Message);
for (let obj of req.body) {
const requestMessage = messageRepository.create(obj);
var channel_message_ID = requestMessage['channel_message_ID'];
if (channel_message_ID) {
await messageRepository.save(requestMessage);
}
}
}
以上是关于在TypeScript中等待Foreach给出错误的主要内容,如果未能解决你的问题,请参考以下文章
VS Code Typescript 在 Vuejs 项目中给出错误“属性不存在”
Parallel.Foreach 给出错误“索引超出了数组的范围”
带有 react-dnd 的 TypeScript 2.0 给出错误“JSX 元素属性可能不是联合类型”