javascript - 从javascript中多个回调内的变量中提取数据

标签 javascript node.js callback

我对 javascript 和回调没问题,但我对此感到非常恼火,需要向 stackoverflow 世界寻求帮助。

我编写了一个函数,按以下方式使用:

var meth = lib.funcTion(a,b); // meth should hold an array of properties { c, d } once executed

现在在 lib.js 中,我们有一个如下的结构:

exports.funcTion = function (a,b) {
    database.connect(params, function(err,get){
          get.query(querylang, function(err, results){
                 var varsIwantToReturn = { var1: results[i].foo, var2: results[i].bar };
          });
    });
// Now how do i return 'varsIwantToReturn'?
};

我已经看到了一些关于将回调()合并到函数中的事情,但我不太确定这是如何工作的。我还看到有些人使用 exec() - 再次,我不确定如何或为何使用它。

请帮忙:)提前致谢。

最佳答案

嗯,这都是异步的,所以如果你尝试返回它 - 它将返回未定义。在 JavaScript 中(没有新的 yield 关键字)函数从上到下同步执行。当您像数据库调用一样进行 IO 调用时,它仍然同步执行。事实上,当 varIwantToReturn 获取人口时,该函数已长时间运行并终止。

剩下的就是做与 database.connectget.query 等异步函数相同的事情,并让函数接受回调:

exports.function = function (a,b, callback) {
    database.connect(params, function(err,get){
          if(err) return callback(err, null); // don't suppress errors
          get.query(querylang, function(err, results){
               if(err) return callback(err, null); // don't suppress errors
               var varsIwantToReturn = { var1: results[i].foo, var2: results[i].bar };
               callback(null, varsIwantToReturn);
         });
    });
};

然后你就可以这样调用它

myExportedFunction(myA,myB, function(err, resp){
    if(err) recoverFromError(err);
    // varsIWantToReturn are contained in `resp`
});

关于javascript - 从javascript中多个回调内的变量中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25357185/

相关文章:

javascript - 使用列和全局过滤器过滤表 - 最有效的方法?

javascript - 如何通过按 Enter 提交输入表单,但按 Shift 和 Enter 时不提交

node.js - 如何在不同的文件中拆分 Bot Framework 对话框

php - 在 PHP 函数中访问单个数组变量

javascript - 从父范围数组中删除元素

javascript - 引用错误: _ref2 is not defined @ react-dom. production.min.js

javascript - 谷歌数据存储查询中的多项选择抛出 ApiError : Precondition Failed error in node

javascript - NodeJs 和 nodemailer - 隐藏电子邮件链接和 URL 中的查询参数?

javascript - 使用 angular.js 和 php 在 $http 请求中的错误回调函数中遇到问题

javascript - 在函数式编程的 javascript 中,返回回调而不是仅仅调用回调有什么惩罚吗?