私のノードJSバックエンドでこのメソッドを実行します。一番下のプリントでノードjsは各ループを同期させます
var locations = [];
exports.constructionsiteParser = function constructionsiteParser(response){
var timestamp = new Date().toDateInputValue();
const $ = cheerio.load(response);
$('situation').each(function(){
var situation = [];
$(this).find('situationRecord').each(function(i){
var startLocationCode = $(this).find('alertCMethod2SecondaryPointLocation').find('specificLocation').text();
var endLocationCode = $(this).find('alertCMethod2PrimaryPointLocation').find('specificLocation').text();
var overallStartTime = $(this).find('overallStartTime').text();
var overallEndTime = $(this).find('overallEndTime').text();
if((startLocationCode != '') && new Date(timestamp) >= new Date(overallStartTime) && new Date(timestamp) <= new Date(overallEndTime)){
Promise.all([
locationCodeToGeodataRequst.geodataByLocationcode(startLocationCode),
locationCodeToGeodataRequst.geodataByLocationcode(endLocationCode)
]).then(values =>{
return createSituationRecord($, this, startLocationCode, endLocationCode, values[0], values[1]);
}).then(function(obj){
console.log("before push", situation);
situation.push(obj);
console.log("after push", situation);
return situation;
}, handleError);
}
})
console.log("from outter", situation.length);
if(situation.length > 0){ //if situation is not empty
locations.push(situation);
}
})
console.log(locations);
}
console.log("from outter", situation.length);
常に0 もconsole.log(locations)
が空
ですこれは、ログの一部です:
...
from outter 0
from outter 0
from outter 0
from outter 0
from outter 0
[]
before push []
after push [....
私は、ノードサーバが実行されるため、この問題が発生したと思います内側の各ループが終了する前の底部。だから、私はそれをもっとうめきたいと思っています。私がしたいことは、次のようなものです:
outer each{
//run this first
inner each{
.....
}
//if inner each is done run this
if(...){}
}
しかしこれを正しい構文にする方法はわかりません。 入れ子になった約束で試してみましたが、うまくいきません。