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'是一个在回调函数范围之外分配的数组。
答案 0 :(得分:9)
您无法从异步回调中返回值。回调通常在声明它的函数返回后执行一段时间(该函数将在调用异步方法后继续执行)。无法使用回调函数将返回到。这是一个简单的例子:
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
}
如果需要依赖异步方法的结果,则需要将需要它的代码移动到回调中。