Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js:从未按预期运行的函数返回_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript node.js:从未按预期运行的函数返回

Javascript node.js:从未按预期运行的函数返回,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我对javascript/node.js非常陌生,下面的代码有问题。这是API调用的处理程序。第二个代码段与第一个代码段类似,只是有一个额外的数据库查找Merchant.findOne(…),因此“newTransaction.save()”函数嵌套得更深一层 两个代码段都正确返回“输出”变量值。但是,第二个代码段也不能正确地将“newTransaction”保存到Mongo数据库中 我很确定这个问题与代码从newTransaction.save(function(err,transaction

我对javascript/node.js非常陌生,下面的代码有问题。这是API调用的处理程序。第二个代码段与第一个代码段类似,只是有一个额外的数据库查找Merchant.findOne(…),因此“newTransaction.save()”函数嵌套得更深一层

两个代码段都正确返回“输出”变量值。但是,第二个代码段也不能正确地将“newTransaction”保存到Mongo数据库中

我很确定这个问题与代码从newTransaction.save(function(err,transaction){..}返回的方式/时间有关,但我似乎无法解决这个问题

我一直在互联网上寻找,试图理解和解决这个问题,但没有成功。任何帮助都是感激的

下面是旧的、更简单的代码,可以按预期工作:

处理程序:函数(请求、回复){
变量输出={
“成功”:没错,
“业务”:[],
“纪元”:日期。现在()
};
findById(request.payload.deviceNumber,函数(err,终端){
如果(错误){
返回应答(Boom.internal('查找终端时出错',err));
}
如果(终端){
票证报价(“比特邮票”,“美元”,1,功能(错误,汇率){
如果(错误){
控制台错误(err);
返回回复(Boom.internal('获取票据报价时出错',err));
}
var newTransaction=新交易({
终端:request.payload.deviceNumber,
商户:terminal.merchant,
C汇率:exchangeRate.buy,
fiatAmtDue:request.payload.transactionValue,
ccAmtDue:ccAmtDue
});
newTransaction.save(函数(错误,事务){
如果(错误){
返回回复(Boom.internal('Error creating new transaction',err');
}
output.operations.push(
{
“控制”:“KeyPairGenControl”,
“rand”:cc.pseudoRandomBytes(32).toString('hex'),
“遵循”:{
“url”:“/pos/v1/AddressAndEncKey”,
“职务”:{
“transactionId”:transaction.transactionId
}
}
}
);
返回应答(输出);
});
});
}否则{
返回应答(Boom.internal('查找终端时出错',err));
}
});
}
以下是新代码,它不会将新的交易数据保存到Mongo DB中

处理程序:函数(请求、回复){
变量输出={
“成功”:没错,
“业务”:[],
“纪元”:日期。现在()
};
findById(request.payload.deviceNumber,函数(err,终端){
如果(错误){
返回应答(Boom.internal('查找终端时出错',err));
}
如果(终端){
Merchant.findOne({merchantId:terminal.Merchant},函数(err,Merchant){
如果(错误){
console.log('找不到商户');
返回应答(输出);
}
var processor=merchant.backendPaymentProcessor.name;
var localCurrency=merchant.localFiatCurrency;
//###################
ticket.quote(处理器、本地货币、1、函数(err、exchangeRate){
如果(错误){
控制台错误(err);
返回回复(Boom.internal('获取票据报价时出错',err));
}
var newTransaction=新交易({
终端:request.payload.deviceNumber,
商户:terminal.merchant,
C汇率:exchangeRate.buy,
fiatAmtDue:request.payload.transactionValue,
ccAmtDue:ccAmtDue
});
newTransaction.save(函数(错误,事务){
如果(错误){
返回回复(Boom.internal('Error creating new transaction',err');
}
output.operations.push(
{
“控制”:“KeyPairGenControl”,
“rand”:cc.pseudoRandomBytes(32).toString('hex'),
“遵循”:{
“url”:“/pos/v1/AddressAndEncKey”,
“职务”:{
“transactionId”:transaction.transactionId
}
}
}
);
返回应答(输出);
});
//返回应答(输出);
});
//###################
});
}否则{
返回应答(Boom.internal('查找终端时出错',err));
}
});
}

我对您的2个版本进行了比较:

检查1 门票。报价

  • 两个版本的回调函数相同
  • new Schema({ <key>: <value>}, { collection : '<collection name>' }); // collection name

    mongoose.model('<Model name>', 
               new Schema({ <key>: <value>}), 
               '<collection name>');     // collection name