【问题标题】:Using callback function inside array.map javascript在array.map javascript中使用回调函数
【发布时间】:2017-11-03 14:03:34
【问题描述】:

我正在尝试为数组中的每个用户加密密码。

router.post("/insertuser", (req, res) => {

  var promises = users.map((item) => {

    bcrypt.genSalt(10)
      .then((salt) => {
        return item
      })    
  })

  Promise.all(promises)
    .then((results) => {
      console.log(results)
      res.json({
        "data": results
      })
    })    
})//end route

但我得到的结果 = [undefined,undefined]。

如何从 bcrypt.genSalt(10).then

返回数组元素

请帮忙,因为我是 ES6 新手

编辑:我的用户用户数组是这样的:

[{“用户名”:“管理员”,“管理员”:真} ]

【问题讨论】:

  • 您的地图回调不返回任何内容,因此,promise 将是 undefined 的数组 - 您需要在 (item) => { /* here */} 中返回一些内容
  • 我该如何纠正。我是新来的。请帮忙。
  • ...也许return bcrypt.genSalt(10) - 这样你就返回一些东西
  • 但我想更新 .map 中的 user.password 字段
  • 或者只是不使用块。只需使用….map(item => bcrypt.genSalt(10).then(salt => item))

标签: javascript ecmascript-6


【解决方案1】:

只需返回来自bcrypt.genSalt 的承诺。

router.post("/insertuser", (req, res) => {

  var promises = users.map((item) => {

    return bcrypt.genSalt(10)
      .then((salt) => {
        return item
      })    
  })

  Promise.all(promises)
    .then((results) => {
      console.log(results)
      res.json({
        "data": results
      })
    })    
})//end route

【讨论】:

  • Simply return the bcrypt.genSalt's result. - 它实际上将返回 Promise,而不是结果,并且解析的值将是 item
  • 非常感谢先生。你拯救了我的一天。
【解决方案2】:

当您在任何承诺之后添加.then() 时,它将直接得到解决。在您的代码中users.map() 将同步运行,并且承诺将未定义。 这是您可以使用的代码:

router.post("/insertuser", (req, res) => {
    var promises = users.map((item) => {
      return bcrypt.genSalt(10);
    })

    Promise.all(promises)
      .then((results) => {
        console.log(results)
    });  
})//

还要注意盐是用来生成哈希的。你只是在产生盐。要生成密码哈希,还要添加bcrypt.hash(password,salt)。这是代码:

var promises = users.map((item) => {
  return bcrypt.genSalt(10);
})

Promise.all(promises)
  .then((results) => {
    promises = results.map((item, index) => {
      return bcrypt.hash(users[index], item);
    });
    return Promise.all(promises);
  })
  .then(result => {
    console.log(result);
  })
  .catch(err => {
    console.log(err);
  });

【讨论】:

    猜你喜欢
    • 2020-12-12
    • 2018-01-17
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多