nodejs结果未定义(异步)?

时间:2015-09-01 19:24:17

标签: node.js asynchronous

我在下面的nodejs中简化了我的代码。我得到了udefined结果,因为函数是异步的。如何获得有效的结果,我是否必须使用承诺?

function findresult() {
    var result;
    setTimeout(function () {
        var result = 2
    }, 1000);
    return result
}
console.log('findresult ' + findresult());//findresult undefined

2 个答案:

答案 0 :(得分:1)

您需要使用简单的回调或承诺,这是一个回调示例:

function findresult(callback) {
    var result;
    setTimeout(function () {
        result = 2
        callback(result);
    }, 1000);
    //return result
}

使用它:

findresult(function(result) {
    console.log("Result is: " + result);
});

答案 1 :(得分:1)

为你的例子

function findresult(callback) {
    var result;
    setTimeout(function () {
        var result = 2
        callback(result);
    }, 1000);
}
findresult(function(result) {
    console.log('findresult ' + result);
});

您实际上是将您的操作作为参数(回调)发送给该函数,当该函数完成时,它会将结果提供给您的回调。

但是在nodejs中,你通常也会想要处理错误,回调的通常语法是function(error, result)(而不仅仅是结果) - 如果error为null,你可以使用结果(调用成功) ,否则它有错误的详细信息。