我对 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.connect
和 get.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/