revalidator (https://github.com/flatiron/revalidator)에 대한 스키마 정의로 원하지 않는 속성에 대한 Javascript 객체를 확인하고 싶습니다.for..in을 사용하여 이벤트 루프 차단
function strip(object, schema) {
var strippedObject = {};
for (var property in schema.properties) {
if (schema.properties[property].type === 'object') {
strippedObject[property] = strip(object[property], schema.properties[property]);
} else {
strippedObject[property] = object[property];
}
}
return strippedObject;
}
이 코드를 복사 원하는 속성과 중첩 된 스키마에 재귀 스키마를 통해 동기 루프 :
나는 다음 코드를 내놓았다.
이번에 이벤트 루프를 차단하는 것에 대해 걱정됩니다.
I/O를 수행하지 않으므로 무시해도됩니까? 의견에 대한
편집
감사합니다. jbaylina가 언급 한 것처럼 실제로 스키마는 약 10 개의 속성을 가진 최대 2 개의 레벨로 중첩되어 있습니다. 그럼에도 불구하고 나는 setImmediate는 IT 작동을 사용하여 시도했지만 정말 문제가있을 때 어쩌면 비동기 적으로 반복하는 것입니다 :
function strip(object, schema, callback) {
var strippedObject = {};
async.each(Object.keys(schema.properties), function (property, next) {
if (schema.properties.hasOwnProperty(property)) {
if (schema.properties[property].type && schema.properties[property].type === 'object') {
strip(object[property], schema.properties[property], function (err, obj) {
if (err) return next(err);
strippedObject[property] = obj;
next();
});
} else {
strippedObject[property] = object[property];
next();
}
}
}, function (err) {
if (err) return callback(err);
return callback(null, strippedObject);
});
}
이 정말 더러워 보이지만, 작업 및 테스트를 전달합니다. 이 솔루션에 대해 어떻게 생각하십니까?
+1을 참조하십시오. 본질적으로 재귀 호출을 받아서 루프 스택의 끝에 넣으므로 루프의 위치를 유지하지만 다른 것들은 먼저 차단하게합니다. –
고마워, 제발 내 편집 고려하십시오. – thertweck