带参数的Node.js回调

时间:2018-09-09 16:31:06

标签: javascript node.js

从昨天开始,我和我的朋友一直在努力使用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,但是我无法使其在我的代码中起作用。

2 个答案:

答案 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);