【发布时间】:2017-10-05 05:39:40
【问题描述】:
我在尝试使用 async.parallel 时收到错误“回调未定义”,但我不知道为什么。 async.parallel 的所有示例都具有内联函数(如 async doco https://caolan.github.io/async/docs.html#parallel),但由于我要运行的函数中有一些逻辑,我试图将它们拆分出来,因此它们不是内联的。这可能是我的问题,但我认为这应该是可能的,我只是无法从示例中弄清楚回调在这种情况下应该如何工作。
然后这里的意图是让两个函数从不同位置获取 ID 列表,然后将它们放在一起并对结果数组执行一些操作。我已经删除了“去做其他事情”,因为它在这个阶段似乎无关紧要。
var structuresIDArray = [];
function getPublicStructures(callback){
request({
url: 'https://esi.tech.ccp.is/latest/universe/structures/?datasource=tranquility',
method: 'GET'
}, function (error, response, body) {
if(!error && !body.error && response.statusCode === 200){
console.log('getting public locations');
structuresIDArray.concat(JSON.parse(body));
callback(null, structuresIDArray);
}else{
callback(error);
}
});
}
function getAssetLocationList(callback){
db.any('select distinct "location_id" from "public"."charassets" where "location_id" is not null')
.then(function (data) {
for (var i = 0; i < data.length; i++) {
structuresIDArray.push(data[i].location_id);
if(i+1===data.length){
callback(null, structuresIDArray);
}
}
})
.catch(function (err) {
callback(err);
});
}
function main(){
async.parallel([ getAssetLocationList(callback), getPublicStructures(callback) ],
function (err, results) {
if (err) {
throw err;
}
// Go do some other stuff now ...
});
}
【问题讨论】:
-
你在 main 函数中调用
getAssetLocationList(callback), getPublicStructures(callback)...callback是什么 - 看起来你没有在任何地方定义它 - 我想你的意思是async.parallel([ getAssetLocationList, getPublicStructures ] ...- 但我'我一点也不熟悉async.js -
看来可以,谢谢。我对传递回调和执行此操作的各种方法很感兴趣,但将其完全删除是可行的。我不确定为什么会这样,但我会回到谷歌并努力理解回调。谢谢!
标签: javascript node.js callback async.js