在TypeScript中等待Foreach给出错误

时间:2017-12-22 08:35:27

标签: typescript

我在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

3 个答案:

答案 0 :(得分:2)

传递给forEach的函数必须是async

req.body.forEach(async function(obj) {
  // ...
  await messageRepository.save(requestMessage);
});

答案 1 :(得分:0)

为什么不这样做?

textField.tap()

答案 2 :(得分:0)

如果要确保在执行循环的下一次迭代之前等待每个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并使用打字稿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);
    }
  }
 }