【问题标题】:return value from within several nested callbacks in node从节点中的几个嵌套回调中返回值
【发布时间】:2015-01-19 16:27:59
【问题描述】:

我想从嵌套回调中返回值。下面是伪代码:

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 的“行”。

【问题讨论】:

  • 您是否尝试在每个方法调用之前添加return 关键字?前任。 function1("arg1", function(err, rows){ return client.query(sql1, function(err,rows){ return 1;} ); ?
  • @Cyber​​neticTwerkGuruOrc 返回不会做任何事情,因为它是异步

标签: javascript node.js callback node-mysql


【解决方案1】:

你没有,并且在某种程度上,你不能。从理论上讲,您可以将值或引用传递给上层上下文并返回它,但这只有在两者之间的每个进程都完全同步时才有效。

那该怎么办?回调是解决方案。您无需传递返回值,而是将一个附加函数传递给您的外部方法,并使用所需的值调用该函数。


【讨论】:

  • 我已经更新了问题。你能请。如果这是您的意思,请发表评论?
  • @KayaToast 是的,差不多就是这样。即使我不知道你为什么用null作为第一个参数来调用回调,但原理是完全正确的。
  • 谢谢。 null 是一种强调没有 err
  • 试过了,它可以工作......但我需要将那个额外的函数传递给外部函数和内部函数。谢谢! ...现在,我不知道为什么,但这句话在我脑海中响起“javascript 中的函数是一流的对象!” :-)
  • @KayaToast 太棒了 :-) 要进一步了解这个主题,您可能需要研究一下分别称为“Promise”和“Promise 对象”的内容。这是一个非常棒的概念,可以将这个回调的东西带到一个全新的、甚至更方便的水平!
猜你喜欢
  • 1970-01-01
  • 2015-03-15
  • 2021-10-02
  • 1970-01-01
  • 2017-11-03
  • 2016-04-10
  • 2013-08-13
  • 2016-03-02
  • 2013-10-26
相关资源
最近更新 更多