gpt4 book ai didi

javascript - beforeCreate 函数没有按顺序执行

转载 作者:行者123 更新时间:2023-12-03 12:42:35 25 4
gpt4 key购买 nike

更新我的 sails (0.10-rc5) 后,

我在 beforeCreate 函数中遇到问题:

  beforeCreate : function(values, next){

console.log("Called beforeCreate User ");
console.log(values);

if(!values.password || values.password !== values.confirmation){
return next({
err : ["Password doesn't match password confirmation"]
});
}

bcrypt.genSalt(10, function(err, salt){
console.log("call within bcrypt");
if (err) return next(err);
bcrypt.hash(values.password, salt, function(err, hash){
if(err) return next(err);
values.password = hash;
});
});

Access.findOne()
.where({ level : values.level })
.exec(function(err, level){
console.log("call within findOne");
if(err) return next(err);
values.level = level.id;
});

console.log("after");
console.log(values);
next();
}

但是,上述函数的输出如下:

Called beforeCreate User 
{ firstName: 'Quad',
lastName: 'Doe',
email: '11@11.com',
password: '123456',
confirmation: '123456',
level: 'admin',
id: '2fa1ba1a-ae1c-4380-9107-3c1f6e8eafb3',
online: false }
after
{ firstName: 'Quad',
lastName: 'Doe',
email: '11@11.com',
password: '123456',
confirmation: '123456',
level: 'admin',
id: '2fa1ba1a-ae1c-4380-9107-3c1f6e8eafb3',
online: false }
call within bcrypt
call within findOne

正如您所看到的,bcrypt.genSalt(.....){} 和 Access.findOne(...){} 在之后之前没有被调用,这应该是.

最佳答案

您所看到的是正在运行的异步代码...

Node/Sails 不会等待回调触发才继续下一个任务。

您需要“嵌套”回调,以便在最后一个回调中调用 console.log("AFTER")

看看async 。它是为解决这些类型的问题而设计的。

或者...

查看fibers

关于javascript - beforeCreate 函数没有按顺序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com