gpt4 book ai didi

javascript - sailsjs 创建两个模型时的错误处理

转载 作者:行者123 更新时间:2023-12-03 06:56:48 27 4
gpt4 key购买 nike

我对两个 Nodejs 和 sails 都很陌生。我正在尝试在一个 Action 中创建两个模型。我的问题是如何处理两个查询中可能发生的错误。

当前代码:

new: function (req, res) {
var errorArray = [];
var data = req.allParams();

User.create({
username: data.username,
password: data.password,
device_id: data.device_id,
own_number: data.own_number,
mobile_numbers: data.mobile_numbers
}).exec(function (err, user) {
if(err){
errorArray.push(err);
}
});

Mobile_number.create({
number: data.own_number,
number_id: this.hash(data.own_number)
}).exec(function(err, mobile_number){
sails.log(err);
if(err){
errorArray.push(err);
}
});

if(errorArray.length == 0){
return res.ok('success');
}else {
return res.send(errorArray.toString());
}
}

这段代码的问题是最后的 if 在查询完成之前就被处理了。等待查询的正确方法是什么?

布鲁诺

最佳答案

首先,你的代码将无法工作,因为 Node.js 是异步的。所以你在执行函数之前检查是否有错误。以下是2个解决方案:

您可以使用async.series 。如果您使用它,如果第一个方法失败,它将停止执行,并返回错误。如果成功,将转到第二种方法。

async.series([
function(callback) {
User.create({
username: data.username,
password: data.password,
device_id: data.device_id,
own_number: data.own_number,
mobile_numbers: data.mobile_numbers
}).exec(callback);
},
function(callback) {
Mobile_number.create({
number: data.own_number,
number_id: this.hash(data.own_number)
}).exec(callback);
}
],
function(error, results) {
// error first finished
if(error)
res.send('error');
else
res.send('success');
}
);

或者您可以使用回调的传统方式来完成。

new: function(req, res) {
var errorArray = [];
var data = req.allParams();

var mobileCreateCallback = function(err, mobile_number, user) {
sails.log(err);
if (err) {
errorArray.push(err);
}

if (errorArray.length === 0) {
sails.log(user, mobile_number);
return res.ok('success');
} else {
return res.send(errorArray.toString());
}
};

var userCreateCallback = function(err, user) {
if (err) {
errorArray.push(err);
}

Mobile_number.create({
number: data.own_number,
number_id: this.hash(data.own_number)
}).exec(function(error, mobile_number) {
mobileCreateCallback(error, mobile_number, user);
});
};

User.create({
username: data.username,
password: data.password,
device_id: data.device_id,
own_number: data.own_number,
mobile_numbers: data.mobile_numbers
}).exec(userCreateCallback);
}

您应该了解回调:callbackhell以及 node.js/sails.js 中的异步函数。

关于javascript - sailsjs 创建两个模型时的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37237877/

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