當我嘗試使用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 ...
});
}
你正在調用'getAssetLocationList(callback),getPublicStructures(callback)'在函數main ...什麼是'callback' - 看起來不像你定義的任何地方 - 我想你的意思是'async.parallel ([getAssetLocationList,getPublicStructures] ...' - 但我並不完全熟悉'async.js' –
這似乎是謝謝。我被掛在回調和各種方式,但刪除它完全有效我不確定爲什麼這個工程,但我會回到谷歌和工作對回調的理解。謝謝! –