分解回调地狱如何传递值
Breaking down Callback Hell how do I pass a value?
在快速路由中使用单皮,我正在执行以下操作:
router.get(/getbuyerinfo, function(req, res) {
var data = "data";
db.collection('buyerRec').find().toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.collection('buyerHistory').find().toArray(function(err, result) {
if (err) throw err;
console.log(result);
console.log(data);
});
});
});
它实际上更深。但是为了尝试以最直接和最快的方式清理深层回调,即使不是最现代的方式,我创建了:
router.get(/getbuyerinfo, getBuyerRec);
function getBuyerRec(req, res) {
var data = "data";
db.collection('buyerRec').find().toArray(getBuyerHistory);
}
function getBuyerHistory(err, result) {
if (err) throw err;
console.log(result);
db.collection('buyerHistory').find().toArray(function(err, result) {
if (err) throw err;
console.log(result);
console.log(data);
});
}
我的问题是"数据"不再在范围内。"data"值来自Express router.get()。如何将"数据"传递给getBuyerHistory函数,以便我可以使用它?
假设你有类似的东西:
(function () {
var data = "data";
db.collection('buyerRec').find().toArray(getBuyerHistory);
}());
function getBuyerHistory(err, result) {
if (err) throw err;
console.log(result);
db.collection('buyerHistory').find().toArray(function(err, result) {
if (err) throw err;
console.log(result);
console.log(data);
});
});
您可以创建一个返回函数的函数,并将data
作为参数传入:
function factory(data) {
return function getBuyerHistory(err, result) {
...
};
}
然后你可以调用它来创建你传递给toArray
的函数:
(function () {
var data = "data";
db.collection('buyerRec').find().toArray(factory(data));
}());
或者,如果您没有在 getBuyerHistory
中使用 this
,则可以将data
绑定为上下文并将绑定函数传递给toArray
:
(function () {
var data = "data";
db.collection('buyerRec').find().toArray(getBuyerHistory.bind(data));
}());
或者,正如@Bergi正确指出的那样,您可以向getBuyerHistory
添加另一个参数,并在没有上下文的情况下使用bind
:
(function () {
var data = "data";
db.collection('buyerRec').find().toArray(getBuyerHistory.bind(null, data));
}());
function getBuyerHistory(data, err, result) {
...
}
相关文章:
- 通过javascript重定向html传递php变量
- 将数组从PHP传递到Javascript
- 如何在php文件中获取$.post-ajax传递的值
- 如何将输入(type=text)从html表单传递到javascript函数
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 从var向代码隐藏函数传递值
- Jquery在函数之间传递表行
- 将变量传递给外部Javascript
- 如何做到这一点,使代码在不传递条件后执行函数
- 在URL中传递JS对象
- 如何将firebase数据传递到函数中
- 如何将PDF作为二进制文件传递到window.open()
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 函数未将值作为参数传递
- 如何将参数传递到angularJs中的工厂
- RequireJS向模块传递配置总是返回undefined
- 绑定时将Parsley minlength消息作为选项传递时,未对其进行自定义
- 分解回调地狱如何传递值
- 避免nodeJs中的回调地狱/将变量传递给内部函数
- 传递给高阶函数的函数中的参数从何而来