2012-02-03 3 views
2

Начал играть с узлом, и все еще совсем новый. У меня есть следующий код, можно ли возвращать «результаты», откуда я хочу в x?Заполнение var из результата обратного вызова?

function dbRequest(sql) { 
     var x; 
     var dbResults = client.query(sql,function(err,results,fields) { 
        if (err) { 
         throw err; 
        } 
         x = results; 
         client.end(); 
       }); 
       // I want x here to return what is in results. 
       return(x); 
} 

ответ

0

Нет. По крайней мере, не так, как вы это пробовали.

Скорее всего, вызов client.query() запустит асинхронный запрос для узла. Это, в свою очередь, означает, что выполнение кода будет продолжаться немедленно и, следовательно, вернет значение x, прежде чем оно сможет заполниться обратным вызовом.

Довольно удобный способ иметь дело с такого рода вещи, чтобы перейти в другой метод обратного вызова, который вы должны задать себе (если вы хотите, чтобы делать определенные вещи с результатом)

Например:

function dbRequest(sql, cb) { 
    var dbResults = client.query(sql,function(err,results,fields) { 
       if (err) { 
        throw err; 
       } 
        if (typeof cb === 'function') { 
         cb(results); 
        } 

        client.end(); 
      }); 
} 

, а затем вызвать его, как

dbRequest('select * from foo', function(data) { 
    // do something with data 
}); 
Смежные вопросы