javascript回调返回undefined

时间:2018-04-24 11:58:12

标签: javascript node.js callback

我需要从js中可用的命令提示符调用该函数。在这里,我从命令promt调用方法为node test.js callfunction。但它正在返回undefined。这是我的代码,

module.exports = {
    callfunction: function (param) {
        function1(param, function (error, result) {
            console.log(result);
        });
    }
};    
var function1 = function (param, callback) {
    callback(null, true);
};    
require('make-runnable/custom')({
    printOutputFrame: false
});

以下是上述代码的输出

true
undefined

我该如何解决这个问题?请有人给我建议。

2 个答案:

答案 0 :(得分:1)

您的代码是正确的,它按预期打印值“true”。如果未定义return语句,则Javascript函数allways返回“undefined”。

带有return语句的示例:

module.exports = {
    callfunction: function (param) {
        return function1(param, function (error, result) {
            return result;
        });
    }
};    
var function1 = function (param, callback) {
    return callback(null, true);
};

module.exports.callfunction(123);

答案 1 :(得分:0)

如果您正在使用jquery,那么处理异步任务有很好的功能,它被称为Deferred

function doAsyncTask() {
    var d = $.Deferred();

    $.get(url, params, function(data) {
        //process data
        d.resolve();
    }).fail(function(e) {
        console.error("get request failed", e);
        d.reject();
    });

    return d;
}

function onAsyncTaskFinished() {
    console.log("async task is finished");
}

function onAsyncTaskFail() {
    console.error("async task is failed");
}

doAsyncTask().then(onAsyncTaskFinished, onAsyncTaskFail);

在纯JavaScript中,您可以传递回调函数,并在异步任务完成后调用它。

function doAsyncTask(callbackFn) {
    setTimeout(function() {
        callbackFn();
    },1000);
}

function onAsyncTaskFinished() {
    console.log("async task is finished");
}

doAsyncTask(onAsyncTaskFinished);