2017-08-28 127 views
2

對於我想要收集到事務中的數據庫,我有幾個查詢。JavaScript async await在forEach循環中不起作用

let t = await db.sequelize.transaction() 
    try { 
    let adr = await addressRepo.add(address, t) 
    let user = await userRepo.add(email, password, name, surname, phone, NIP, REGON, id_number, adr.id, t) 
    await userRoleRepo.add(user.id, user_role, t) 
    if (languages != null) { 
     languages.forEach(async function (language) { 
     await userLanguageRepo.add(user.id, language.id, language.main, t) 
     }) 
    } 
    await t.commit() 
    res.status(201).json(user) 
    } catch (error) { 
    await t.rollback() 
} 

根據上面的代碼中,創建事務和所有queres包括exept的那些forEach循環。因此,我得到:

Executing (fb270893-9146-43b7-a35e-8960ea386513): START TRANSACTION; 
Executing (fb270893-9146-43b7-a35e-8960ea386513): INSERT INTO `address` (`id`,`country`) VALUES (DEFAULT,'country'); 
Executing (fb270893-9146-43b7-a35e-8960ea386513): INSERT INTO `user` (`id`,`email`,`password`,`name`,`surname`,`active`,`address_id`,`created_at`,`updated_at`) VALUES (DEFAULT,'a15','$2a$10$7uImQNl0T12CZLUB0Asxwu8yCGUa/eZnbr8TATX8V/tnnO8erdYzy','John','Dee','0',15,'2017-08-28 07:44:03','2017-08-28 07:44:03'); 
Executing (fb270893-9146-43b7-a35e-8960ea386513): INSERT INTO `user_role` (`user_id`,`role_id`) VALUES (7,1); 
Executing (fb270893-9146-43b7-a35e-8960ea386513): COMMIT; 
(node:5873) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: commit has been called on this transaction(fb270893-9146-43b7-a35e-8960ea386513), you can no longer use it. (The rejected query is attached as the 'sql' property of this error) 
(node:5873) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 
(node:5873) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: commit has been called on this transaction(fb270893-9146-43b7-a35e-8960ea386513), you can no longer use it. (The rejected query is attached as the 'sql' property of this error) 

我看起來async提交在forEach循環之前執行。如何在提交之前執行forEach循環?

回答

2

而不是forEach應該使用for of循環。

我在這個post找到了答案。