javascript - 如何从nodejs回调函数返回值?

标签 javascript node.js callback

mturk_ops.block = function(callback){


mongodb.collection(collectionName, function(err, collection){

    collection.distinct('workerId',function(err,result){
        var result1 = [];
        console.log(result.length);
        for(var i=0; i< result.length;i++){

            console.log(result[i]);

          result1[result[i]] =  collection.count({
                'workerId':result[i],
                "judgementStat" : "majority"
            },function(err, count){
                //  console.log(count);
              //  globals.push(count);
                return count ;
                // console.log( worker + ' majority : ' + count);

            });

        }

    console.log(result1);
    });


});

我在这里尝试打印“result1”,但它总是打印具有未定义值的数组。 'result1' 是一个在回调函数范围之外赋值的数组。

最佳答案

您不能从异步回调中返回值。回调通常在声明它的函数返回后的某个时间执行(该函数将在调用异步方法后继续执行)。没有地方可以让回调函数返回。这是一个简单的例子:

function doSomething() {
    var x = 10;
    doSomethingAsynchronous(function () {
        // This is a callback function
        return 30; // Where would I return to?
    });
    x += 10; // Execution continues here as soon as previous line has executed
    return x; // doSomething function returns, callback may not have run yet
}

如果您需要依赖异步方法的结果,则需要将需要它的代码移到回调中。

关于javascript - 如何从nodejs回调函数返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452660/

相关文章:

javascript - JS : Avoiding modifications of ".innerHTML"

javascript - Bootstrap 3 - 词缀不改变类

javascript - 重置表单/从 jQuery 验证中删除错误类

javascript - axios PUT 响应后更新 vuex 状态

ruby-on-rails-3.1 - Rails 中的 after_destroy 回调顺序

javascript - Try/catch block 破坏了异步 JS 代码

node.js - 在使用 Angular2 时,我们需要 Node.js 和 Express.js 吗?

javascript - 如何在node.js中循环请求

java - Java 中的委托(delegate)映射

ctypes回调函数抛出SIGSEGV