与异步的比特币.哈希函数返回未定义,但使用.then可以正常工作



下面是async (returnsundefined)

的代码
userService.register = (username, password) => {
return bcrypt.hash(password, saltRounds, async(err, hash) => {
const newUser = new user({
username: username,
password: hash
})
return await newUser.save()
})
}

.then的代码是一样的,它可以正常工作

userService.register = (username, password) => {
return bcrypt.hash(password, saltRounds)
.then(hash => {
const newUser = new user({
username: username,
password: hash
})
return newUser.save()
})
}

这是记录的行为:

接受回调的异步方法,当回调未指定时返回Promise如果Promise支持可用

你在第一个例子中传递一个回调,所以bcrypt不返回一个承诺。

另一种编写代码的方法是使包装函数async:
userService.register = async (username, password) => {
const hash    = await bcrypt.hash(password, saltRounds);
const newUser = new user({
username: username,
password: hash
})
return await newUser.save(); // or just `return newUser.save()`
}

最新更新