javascript - 如何使 forEach 循环同步

标签 javascript ecmascript-6

我这里有一个异步问题。当 res.json({ errors }); 返回时,forEach 仍在运行,因此所有错误都不会被拾取。我该如何处理?

router.post('/new/user', async function (req, res, next) {
    const validateEmail = async (email) => {
      var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
      return re.test(email);
    };
    
    const reqBody = { email, password };
    
    let errors = {};

    Object.keys(reqBody).forEach(async (field) => {
      if (field === 'email' && validateEmail(await reqBody[field])) {
        errors = { ...errors, [field]: 'Not a valid Email' };
      }
      console.log(3);
    
      if (field === 'password' && password !== '' && password < 4) {
        errors = { ...errors, [field]: 'Password too short' };
      }
    });
    
    if (Object.keys(errors).length > 0) {
      res.json({ errors });
    }
}

最佳答案

使用 for...of 来循环遍历数组元素,您可以使用 await

for(const field of Object.keys(reqBody)){
   //Code using await
}

关于javascript - 如何使 forEach 循环同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62827155/

相关文章:

javascript - 在 Javascript 对象中移动键/值

javascript - 在表中使用 knockoutjs foreach 控件显示有限行

Javascript检查对象数组中是否存在字符串

javascript - 在 JavaScript 中解构导入的对象

javascript - 这个变量在ES6中是全局的吗?

javascript - [].__proto__ === Array.prototype//=== [Symbol(Symbol.unscopables) : Object]?

javascript - jQuery ajax 未在子函数中触发

javascript - 如何处理动态内容的点击事件?

javascript - 向 Ember 应用程序添加一个 "times" block 助手

javascript - 使用 react webpack 文件加载器提供静态 pdf