2015-01-19 2 views
0

Я хочу вернуть значение из вложенных обратных вызовов. Ниже приведен псевдокод:возвращаемое значение из нескольких вложенных обратных вызовов в узле

dataSetFinal = function1() 
within function1 
    database is queried to get dataSet1 
    call function2, using dataSet1 as arguments 
     within function2 
     query database to get dataSet2 
     return dataSet2 
    return dataSet2 

Вот моя попытка сделать его работу

dataSetFinal = function1("arg1", function(err, rows){ 
        client.query(sql1, function(err,rows){ 
         function2(rows[0].userId, function(err, rows){ 
          client.query(sql2, function(err, rows){ 
           return rows; 
          }); 
         }); 
        }); 
       }); 

Но я не могу понять, как получить function1 вернуть Function2 в «строк».

+0

Вы пытались добавить ключевое слово 'return' перед каждым вызовом метода? Ex. 'function1 (" arg1 ", function (err, rows) {return client.query (sql1, function (err, rows) {return 1;});'? –

+0

@CyberneticTwerkGuruOrc Возвращение ничего не сделает, поскольку это ** асинхронный **. –

ответ

3

Вы этого не сделаете, и не можете. Теоретически вы можете передать значение или ссылку на верхний контекст и вернуть его, но это работает только в том случае, если каждый процесс между ними работает идеально синхронно.

А что делать? Обратный вызов - это решение. Вместо ретрансляции по возвращаемому значению вы передаете дополнительную функцию вашему внешнему методу и вызываете эту функцию с требуемым значением.


+0

Я обновил вопрос. Можете ли вы прокомментировать это, если это то, что вы имели в виду? –

+0

@KayaToast да, в значительной степени именно это. Даже я не знаю, почему вы вызываете обратный вызов с 'null' в качестве первого аргумента принцип абсолютно прав. – jAndy

+0

Спасибо. «null» был способом подчеркнуть, что нет «err' –

Смежные вопросы