2016-02-18 2 views
1

У меня есть кусок кода, как это:Передача переменных в функцию обратного вызова

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(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 это соединение создается из node-mysql

Теперь моя проблема заключается в том, что я не могу ссылаться на Guid в checkExistence(), и я не хочу введите guid как глобальную переменную.

Можно ли получить guid в checkExistence()?

+0

Обратный звонок будет 'function() {checkExistence (guid); } 'и принять' guid' в качестве аргумента. – Rayon

+0

Почему бы просто не добавить параметр? –

ответ

6

Вы можете добавить 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)); 
+0

Спасибо :-). Я новичок в javascript. – Brian

0

Вы можете использовать функцию Function.bind для Тхет, как это:

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)); 
0

Может быть, вы могли бы использовать функцию привязки,

var checkExistence = function(guid, err, rows) { ... 

и вызвать метод запроса, как этот

con.query('SELECT guid FROM myDB.myTable WHERE guid = ?', guid, checkExistence.bind(null, guid); 
0
var checkExistence = function(err, rows, guid) { 
    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(err, rows, guid)); 
Смежные вопросы