嘿伙计们,我在node.js中运行了这段代码:
function syncVout(transaction, vouts, Voutcallback){
async.each(vouts, function(vout, callback){
database('vout').insert({
'transaction': transaction,
'value': vout['value'] * 100000000,
'n': vout['n'],
'asm': vout['scriptPubKey']['asm'],
'hex': vout['scriptPubKey']['hex'],
'reqSigs': vout['scriptPubKey']['reqSigs'],
'type': vout['scriptPubKey']['type']
}).then(function () {
syncVoutAddresses(vout['scriptPubKey']['hex'], vout['scriptPubKey']['addresses'], function(){
callback(); //<---- Error on this line!
});
}).catch(function(err){
error(err + "Vouts");
callback(); //<---- Error on this line!
});
}, function(err, res){
if(err){error(err + "Vouts");}
Voutcallback();//<---- Error on this line!
});
}
function syncVoutAddresses(vouthex, addresses, callback){
database('vout').select('id').where({'hex': vouthex}).then(function(rows){
if(rows[0] != undefined){
connectVoutAddress(addresses, rows[0]['id'], function(){
callback(); //<---- Error on this line!
});
}else{
callback(); //<---- Error on this line!
}
}).catch(function(err){
error(err);
callback(); //<---- Error on this line!
});
}
修改调用syncVout
:
async.series([
syncVin(rows[0]['id'], vin),
syncVout(rows[0]['id'], vout)
], function(err, res) {
//Write error
if (err) {
error(err);
}
callback();
});
在标记的行上我收到此错误:
Unhandled rejection TypeError: undefined is not a function
我错了什么?有人可以建议我一个让回调起作用的解决方案吗?
答案 0 :(得分:0)
async.series()
接受一系列函数。您的代码正在执行数组中的函数,并传递async.series()
那些显然为undefined
的函数的返回值。相反,您需要将syncVin
和syncVout
调用转换为匿名函数,以便它们可以由异步库调用,而不是由解释器立即调用。
async.series([
function(callback) {syncVin(rows[0]['id'], vin, callback)},
function(callback) {syncVout(rows[0]['id'], vout, callback)}
], function(err, res) {
//Write error
if (err) {
error(err);
}
// both functions done here
});
而且,你必须确保syncVin() and
syncVOut()`在完成时正确调用它们传入的回调函数。
我并不完全遵循所有其他代码,所以这可能只是您需要修复的第一件事。
答案 1 :(得分:0)
溶液:
async.series([
function(callback) {
syncVin(rows[0]['id'], vin, function() {
callback();
});
},
function(callback) {
syncVout(rows[0]['id'], vout, function() {
callback();
});
}
], function(err, res) {
//Write error
if (err) {
error(err);
}
callback();
});