promise
을 사용하여 result array
의 우편함에 대한 응답을 생성합니다. 그러나 resolve()
은 forEach 루프가 끝나기 전에 호출되고 resolve()
은 forEach 루프 외부에 호출됩니다. 콜백 스택 기능 때문이라고 생각합니다.nodeJS : for 루프가 완료되기 전에 실행 약속, 콜백 스택
callback stack
을 고려하여 forEach 루프가 실행 완료된 후에 resolve()
을 어떻게 실행합니까?
(server.js) : 응답 중 하나가 도착하기 전에
logServer.post('/log/asset/audit/', function(req,res){
console.log('--- starting log/asset/audit');
logDB.collection('logs')
.find({"transaction.assetName" : assetName, "transaction.assetOwner" : assetOwner})
.toArray((err, result) => {
let token = JSON.parse(JSON.stringify(self_jwt_body));
var JSONPromise = new Promise((resolve, reject) => { //initialization
result.forEach(function(element, index, array) {
console.log('- before request.post');
request.post({
url: `${dc_link}/audit`, //includes dc_IP, dc_port and /audit
headers: {
"jwt": jwt.sign(token, jwtSecret)
}
}, function(error,response,body) {
console.log('path 0');
let parseBody = JSON.parse(body);
console.log('path 3');
result[0].transaction.signature = parseBody.additionalData;
console.log('result: ', result);
//**HERE
});
});
//**HERE
resolve();
}; //end callback
JSONPromise.then(() => { //finalization //**HERE
respondWithJSON(200, req.body.result, req.body.description, res, result);
console.log('end log/asset/audit');
};
});
});
모든 post() 호출이 완료된 후에 resolve를 호출하고 싶습니다. –
예, 예 : result-array에 대한 모든 수정이 끝나면 resolve()를 호출하고 respondWithJSON을 호출합니다. – computerguy1234
@SLaks 응답이 좋습니다. –