在节点js模块中创建回调

时间:2018-09-15 17:08:05

标签: javascript node.js

如何在module.exports参数内创建回调函数。 我正在尝试做以下类似的事情,我想知道如何实现回调函数。

module.js

SELECT a.id, a.Nickname, COUNT(c.Author) as num_content
FROM Authors a LEFT JOIN
     Content c
     ON c.Author = a.id
GROUP BY a.id, a.Nickname
ORDER BY num_content ASC;

app.js

module.exports = (a, b, callback) => {
  let sum = a+b
  let error = null
  //callback
}

3 个答案:

答案 0 :(得分:3)

在模块中。导出需要“调用”回调函数。 像这样

// Get the values from the table
lua_getfield(L, 2, "Value1");
lua_getfield(L, 2, "Value2");
lua_getfield(L, 2, "Value3");

const char *value_3 = luaL_checkstring(L, -1);
const char *value_2 = luaL_checkstring(L, -2);
const char *value_1 = luaL_checkstring(L, -3);

这会将控件返回给app.js callback(error, sum) 函数。 您可以在此处实现回调函数。即您要如何处理收到的结果。

您的代码如下所示:-

module.js

add()

app.js

    module.exports = (a, b, callback) => {
      let sum = a+b
      let error = null
      callback(error, sum) // invoke the callback function
    }

答案 1 :(得分:1)

您已将sum用于函数;但我将使用除法,因为这样我可以向您展示回调的错误内容。

您的导出将如下所示

module.exports = {
  divide: (a,b,cb) => {
    if (b === 0) {
      cb('divide by zero', null);
    } else {
      cb(null, a/b);
    }
  }
}

以及类似的导入

var func = require('./testExport').divide;
func(1,2,(err,res) => {
  console.log(err,res);
});
func(1,0,(err,res) => {
  console.log(err,res);
})

回调仅是您从调用函数的位置发送来的函数。在这两个函数调用中(在导入位置),您都看到我们正在以一个带有两个参数的回调形式发送函数。

在导出的地方,我们调用同一函数,第一个参数为错误,第二个参数为res。

如果要在不使用require().func的情况下导入函数,则必须在default中导出函数。

module.exports = (a,b,cb) => {
  if (b === 0) {
    cb('divide by zero', null);
  } else {
    cb(null, a/b);
  }
}

并将其导入为

var defaultFunc = require('./testExport')

答案 2 :(得分:1)

add.js

module.exports = (a, b, callback) => {
   if (typeof a !== 'number' || typeof b !== 'number') {
      return callback(new Error('Invalid argument passed'), null);
   }
   let sum = a + b;
    callback(null, sum);
};

app.js

const add = require('./add');

add(1, 2, (err, result) => {
  if (err) {
     console.log(err);
  }
  console.log(result);
});

在这里,我们将错误作为第一个参数,将实际总和作为第二个参数传递给回调函数。假设我们传递的是字符串而不是数字,那么第一个参数将包含错误对象,结果将为null。

干杯。