2017-12-22 11 views
0

私はExpress JSでJSを開発していましたが、アプリケーションをTypeOrmのTypescriptに移行しています。TypeScriptでForeach Givingエラーが発生するのを待ちます

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 
+0

のforEachが – mehulmpt

答えて

0

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

おかげでたくさんの仲間を非同期されていない他の機能が含まれています...しかし、それは非同期の内部で呼び出される必要がある理由を説明してくださいすることができますし、私たちがどんな利益を得ているのか...私は最近、 pescript。 –

+0

これはコールバックを 'Promise'を返すものに変えますが、' save() 'コールが完了するまでループの各反復を待つことはありません。ここで 'await'と' async'の両方を削除するだけで同じ効果が得られます。 – Duncan

0

に直面していますこれをなぜしませんか?

forEachに渡された関数が asyncでなければならないであろう
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); 
    } 
} 
} 
0

あなたが前に完了する各save()呼び出しを待つようにしたい場合は単純に非同期コールバックでforEachを使用して動作しません。ループの次の反復を行います。あなたが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); 
    } 
    } 
} 
関連する問題