Javascript 将变量传递到回调函数
我有一段代码如下:Javascript 将变量传递到回调函数,javascript,node.js,callback,Javascript,Node.js,Callback,我有一段代码如下: var guid = 'unique_guid'; con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, function(err, rows) { if(err) throw err; if(rows.length == 0) { console.log('new guid: ' + guid); // do more things which requ
var guid = 'unique_guid';
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, function(err, rows) {
if(err) throw err;
if(rows.length == 0) {
console.log('new guid: ' + guid);
// do more things which require guid
} else {
console.log('old guid: ' + guid);
// do more things which require guid
}
}
var checkExistence = function(guid, err, rows) {
if(err) throw err;
if(rows.length == 0) {
console.log('new guid: ' + guid); // guid can't be referenced here
// do more things which require guid
} else {
console.log('old guid: ' + guid); // guid can't be referenced here
// do more things which require guid
}
}
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, checkExistence.bind(null, guid));
为了避免回调地狱,我给回调函数起了一个名字,并按照如下方式重构它:
var checkExistence = function(err, rows) {
if(err) throw err;
if(rows.length == 0) {
console.log('new guid: ' + guid); // guid can't be referenced here
// do more things which require guid
} else {
console.log('old guid: ' + guid); // guid can't be referenced here
// do more things which require guid
}
}
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, checkExistence);
con是从中创建的连接
现在我的问题是我不能在checkExistence中引用guid,我不想将guid作为全局变量
是否可以在checkExistence中获取guid?您可以使用Function.bind函数,如下所示:
var guid = 'unique_guid';
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, function(err, rows) {
if(err) throw err;
if(rows.length == 0) {
console.log('new guid: ' + guid);
// do more things which require guid
} else {
console.log('old guid: ' + guid);
// do more things which require guid
}
}
var checkExistence = function(guid, err, rows) {
if(err) throw err;
if(rows.length == 0) {
console.log('new guid: ' + guid); // guid can't be referenced here
// do more things which require guid
} else {
console.log('old guid: ' + guid); // guid can't be referenced here
// do more things which require guid
}
}
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, checkExistence.bind(null, guid));
您可以将Function.bind函数用于thet,如下所示:
var guid = 'unique_guid';
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, function(err, rows) {
if(err) throw err;
if(rows.length == 0) {
console.log('new guid: ' + guid);
// do more things which require guid
} else {
console.log('old guid: ' + guid);
// do more things which require guid
}
}
var checkExistence = function(guid, err, rows) {
if(err) throw err;
if(rows.length == 0) {
console.log('new guid: ' + guid); // guid can't be referenced here
// do more things which require guid
} else {
console.log('old guid: ' + guid); // guid can't be referenced here
// do more things which require guid
}
}
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, checkExistence.bind(null, guid));
您可以添加guid作为参数并返回函数:
var checkExistence = function(guid) {
return function(err, rows) {
if(err) throw err;
if(rows.length == 0) {
console.log('new guid: ' + guid); // guid can't be referenced here
// do more things which require guid
} else {
console.log('old guid: ' + guid); // guid can't be referenced here
// do more things which require guid
}
};
};
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, checkExistence(guid));
您可以添加guid作为参数并返回函数:
var checkExistence = function(guid) {
return function(err, rows) {
if(err) throw err;
if(rows.length == 0) {
console.log('new guid: ' + guid); // guid can't be referenced here
// do more things which require guid
} else {
console.log('old guid: ' + guid); // guid can't be referenced here
// do more things which require guid
}
};
};
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, checkExistence(guid));
也许你可以使用bind函数
var checkExistence = function(guid, err, rows) { ...
然后像这样调用方法查询
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, checkExistence.bind(null, guid);
也许你可以使用bind函数
var checkExistence = function(guid, err, rows) { ...
然后像这样调用方法查询
con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, checkExistence.bind(null, guid);
回调函数将是{checkExistenceguid;}并接受guid作为参数..为什么不只添加一个参数?回调函数将是{checkExistenceguid;}并接受guid作为参数..为什么不只添加一个参数?谢谢:-。我是javascript新手。谢谢:-。我是javascript新手。