节点js导出模块中的回调

时间:2015-11-16 21:06:56

标签: javascript node.js

我是节点新手,请原谅我,如果这很简单的话。

我试图在函数完成后运行回调。无论我尝试哪种方式,回调都会先执行。

我的模块import_data.js

module.exports.download = function(url, path, supplier, callback) {
//SF add dates to logging
console.log('Import for '+supplier+' started');
request({uri: url})
    .pipe(fs.createWriteStream(path))
    .on('close', function() {
        console.log('Import complete');
    },function(err, data){
        callback;
    });
};

import_js被调用为常见的

'use strict';

//var db              = require('../config/sequelize').sequelize;

var common              = require('./common/index.js'),
    async               = require('async');

common.importData(
    'www.url.com',
    '/tmp/target.csv', 
    'Target Compenents', 
    console.log('callback')
);

我希望console.log(' calback')成为记录的最后一件事。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

你必须添加一个函数作为你的回调, console.log 这是唯一的方法,它不是一个你可以用作回调的函数。
因此,要修复它,您可以将 console.log 包装成如下所示的函数:

common.importData(
    'www.url.com',
    '/tmp/target.csv', 
    'Target Compenents', 
    function(){console.log('callback')}
);

我希望它会对你有所帮助!

答案 1 :(得分:1)

应该是这样的:

模块

module.exports.download = function(url, path, supplier, callback) {
  //SF add dates to logging
  console.log('Import for '+supplier+' started');
  request({uri: url})
    .pipe(fs.createWriteStream(path))
    .on('response', function(response) {
      // now it's ready
      callback(response);
    })
    .on('error', function(err) {
      console.log(err);
    });
};

应用

common.download('some_url', 'target.csv', 'Target Components', function(response) {
  console.info(response);
  // ....
});