从昨天开始,我和我的朋友一直在努力使用Node.js回调。我们具有以下功能:
// helperFunction.js
function foo(param) {
request.get({
url: <url>
headers: {<headers>}
}, (err, response, data) => {
array = []
obj.forEach(function (entry) {
// do stuff with array
};
});
return array;
});
}
module.exports.foobar = foo;
然后我们从app.js中调用它。 从昨天开始,我们更新了代码以使用函数来等待回调,如下所示:
// app.js
//var bar = require('./helperFunction');
//console.log(helperFunction.foobar('param')); // prints undefined
function bar(){
console.log('Log something')
}
foo(bar);
但是我们不知道如何将参数传递给foo
。我试图将param
(是一个字符串)添加到bar
中,但是它不起作用。
作为记录,我知道其他帖子,例如this,但是我无法使其在我的代码中起作用。
答案 0 :(得分:0)
将函数传递给foo
。像这样:
foo(() => bar("Hi, I'm something"));
function foo(fn, err) {
if (!err && fn instanceof Function) {
fn();
}
}
function bar(someThing){
console.log(`Log ${someThing}`);
}
答案 1 :(得分:0)
在foo
中,您只需添加一个回调参数,而无需返回即可调用此函数。按照惯例,回调函数的第一个参数是错误对象。如果未发生错误,则此对象为null,并且以下参数是该函数的实际结果。您的代码不包含错误处理,因此我添加了它。如果error
存在,您将不会收到任何数据,并且foo
将无法计算其尝试计算的任何内容。在这种情况下,foo
应该尝试解决问题本身,或者将错误传播给调用者。
function foo(param, cb) {
request.get({
url: <url>
headers: {<headers>}
}, (err, response, data) => {
if (err) {
return cb(err);
}
array = []
obj.forEach(function (entry) {
// do stuff with array
};
});
cb(null, array);
});
}
function bar(err, data){
console.log('Log something')
}
foo('some param', bar);