我使用異步模塊的forEachOf方法在遍歷對象後打印最終結果。下面是我在做什麼縮短版:在node.js異步模塊的forEachOf方法中未調用可選回調
var async = require('async'),
cheerio = require('cheerio'),
request = require('request');
var returnArray = [];
async.forEachOf(myObj, function (value, key, callback) {
var anotherObj = {};
anotherObj.type = "val1";
request(someurl, function(err, res, body) {
if (err) {
return callback(err);
}
var $ = cheerio.load(body);
anotherObj.name = "val2";
var miniObj = {};
$('#some-element', "#an-id").each(function(i, value) {
var val = value.value;
miniObj[size] = val;
});
anotherObj.miniObj = miniObj;
returnArray.push(anotherObj);
return callback();
});
}, function (err) {
if (err) {
console.error(err.message);
}
console.log(returnArray);
});
然而,當我運行程序,沒有什麼(即「returnArray」)被打印到控制檯像它應該是。
僅供參考,我已經看過這些,類似的帖子:
- Using async module to fire a callback once all files are read(似乎已經過時,使用了錯誤的方法,並沒有解決問題)
- Last callback not being called using async(不解決問題)
我不知道我在做什麼錯在這裏。任何人都可以指出我做錯了什麼?
謝謝!
編輯:所以我想我終於搞清楚我做錯了什麼。在前面提供的另一個示例中,我忘記添加'return callback()'語句。然後它工作。這個例子與這個例子唯一的區別在於,我上面提供的例子中的'return callback()'語句本身在另一個異步方法中被調用。我想爲了解決我的問題,我會在第二個異步方法完成後,以某種方式確保(可能在async的庫中使用某個控制流函數)在正確的'範圍/級別'調用'return callback()'。我認爲我會把這個,我的錯誤歸因於缺乏在異步文檔中正確使用'return callback()'語句的文檔。一旦我弄清楚了,我會用解決方案更新這篇文章(並且趕上一些睡眠)!
'returnObject' vs'returnArray'? – robertklep
糟糕!這只是一個錯字。 – youngrrrr
你的myObj對象的結構是什麼?你確定你不應該使用'async.each'嗎? –