我建立了從貓鼬的Model.save()
但由於某些原因的承諾數組從Promise.all()
返回的數據是不確定的Promise.all()返回所有結果爲未定義
代碼的數組
const saveDataArray = [];
//go through results and save them to the db
Object.keys(passData.scrapeUniqueData).map((index) => {
const result = gamesExport.addGame(passData.scrapeUniqueData[index], passData.leagueInfo.league_id, passData.leagueInfo.leagueID, passData.leagueInfo.year);
if(result)
saveDataArray.push(result);
});
//const -> saveDataArray
[Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise, Promise]
return Promise.all(saveDataArray)
.then((savedDBData) => {
console.info('savedDBData', savedDBData);
console.info('saveDataArray', saveDataArray);
passData.savedDBGames = savedDBData.filter(function(n){ return n != undefined });
return passData;
})
//const -> savedDBData
[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
因此imo savedDBData
應該與`saveDataArray'返回一樣。爲什麼不是Promise.all返回保存的數據?
AddGame
addGame: (details, league_id, leagueID, year) => {
"use strict";
if(!details.result && details.result[0] === "P"){
console.error('result skipped for postponded match');
return;
}
if (details && details.notes !== "Postponed" && !details.postponed) {
var result = new Games();
result.fixtureID = details.fixtureID;
if (details.date.toString().indexOf('z') === -1) {
result.date = Date.parse(moment(details.date.toString(), "DD-MM-YYYY H:m").format());
} else {
result.date = details.date;
}
result.home_id = details.home_id._id;
result.away_id = details.away_id._id;
result.league_id = league_id;
result.leagueID = leagueID;
result.year = year;
result.norsemen = details.home_id.name.isNorsemen() || details.away_id.name.isNorsemen();
if (details.result) {
if (details.result.home === "A" && details.result.away === "A") {
result.result = ['A', 'A'];
result.postponed = true;
} else if (details.result.home === "H" && details.result.away === "W") {
result.result = ['H', 'W'];
} else if (details.result.home === "A" && details.result.away === "W") {
result.result = ['A', 'W'];
} else if (details.result.home === "C" && details.result.away === "C") {
result.result = ['C', 'C'];
result.cancelled = true;
} else if (details.result.home === "P" && details.result.away === "P") {
result.result = ['P', 'P'];
result.postponed = true;
} else {
result.result = [parseInt(details.result.home), parseInt(details.result.away, 10)];
}
}
return result.save(function (err, saveData) {
if (err) console.error(err);
return result;
});
} else {
return null;
}
},
你是否已經測試了'result.then(數據=> console.dir(數據))'在你的地圖中,真正解決了不同於'undefined'的問題?我會假設這個錯誤已經在'addGame'中。 –
它實際上取決於'addGame'的分辨率。你可以做'saveDataArray [0]。然後(console.log)'。如果你在那裏沒有定義,你的邏輯是正確的。 – drinchev
啊,我回來了'承諾',但承諾的返回值是空的! arghh傻。雖然我很困惑,爲什麼它的空的 –