我是节点新手,请原谅我,如果这很简单的话。
我试图在函数完成后运行回调。无论我尝试哪种方式,回调都会先执行。
我的模块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')成为记录的最后一件事。
非常感谢任何帮助。
答案 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);
// ....
});