回调不是函数

时间:2015-10-14 17:55:23

标签: javascript node.js

我正在尝试检索一个json对象以在另一个模块中使用它,但是我遇到了回调问题。我有错误"回调不是函数"。我使用回调因为我的变量描述是未定义的,所以我认为它是异步的问题。

你能帮助我吗?)

var leboncoin = function () {
    var http = require('http')
    var bl = require('bl')

    http.get("http://www.website.com", function (response, callback) {
        response.pipe(bl(function (err, data) {
            if (err) {
                return console.error(err)
                callback(err);
            }
            var data = data.toString()

            var brand = ...
            var model = ...
            var releaseDate = ...
            var km = ...
            var fuel = ...
            var gearbox = ...

            description.Brand = brand;
            description.Model = model;
            description.Year = releaseDate;
            description.KM = km;
            description.Fuel = fuel;
            description.Gearbox = gearbox;

            callback(description);
            return (description)

            /*console.log(description.Brand);
            console.log(description.Model);
            console.log(description.Year);
            console.log(description.KM);
            console.log(description.Fuel);
            console.log(description.Gearbox);*/

        }))
    })
}

exports.leboncoin = leboncoin;
var module = require('./leboncoin');
var res = module.leboncoin();

console.log(res);

2 个答案:

答案 0 :(得分:7)

回调不仅仅是出现的魔力。您需要为函数定义一个参数并传递您想要使用的回调。

// --------------------------v
var leboncoin = function (callback) {
    var http = require('http')
    var bl = require('bl')

    http.get("http://www.website.com", function (response) {
        response.pipe(bl(function (err, data) {
            if (err) {
                callback(err);
                return;
            }
            var data = data.toString()
            var description = { /* your description object */ }

            callback(description);
        }))
    })
}

exports.leboncoin = leboncoin;
var module = require('./leboncoin');

// -----------------vvvvvvvv
module.leboncoin(function(res) {
    console.log(res);
});

答案 1 :(得分:0)

方法http.get需要一个只接受名为response的参数的函数(或任何你想要的名称,名称并不重要),因此你的第二个参数{{1} },未定义并且调用它将在该错误中结束。