값을 반환 할 다음 함수를 고려하십시오.Node.js 함수에서 값을 반환하는 올바른 방법
방법 1 :
function getData() {
var myData = '';
var DateObj = new Date();
for (i=0; i<50000; i++) {
myData += "'" + DateObj.toString() +"', ";
}
return myData;
}
방법 2 :
function getData(calbck) {
try{
var myData = '';
var DateObj = new Date();
for (i=0; i<50000; i++) {
myData += "'" + DateObj.toString() +"', ";
}
} catch(e){
return calbck(e,null);
}
return calbck(null, myData);
}
내가 테스트 한 두 가지 방법이 작동합니다. 어떤 것이 최선의 선택입니까?
감사
업데이트 : 다음 코드로 테스트.
function getData1() {
var myData = '';
var DateObj = new Date();
for (i=0; i<50000; i++) {
myData += "'" + DateObj.toString() +"', ";
}
return myData;
}
function getData2(calbck) {
try{
var myData = '';
var DateObj = new Date();
for (i=0; i<50000; i++) {
myData += "'" + DateObj.toString() +"', ";
}
} catch(e){
return calbck(e,null);
}
return calbck(null, myData);
}
console.log('call getData1() start');
console.time('5000000-getData1()');
getData1()
console.log('call getData1() End');
console.timeEnd('5000000-getData1()');
console.log('call getData2(calbck) start');
console.time('5000000-getData2(calbck)');
getData2(function(err,Returned_value){
if(err) return console.log(err);
//console.log(Returned_value);
console.log('call getData2(calbck) End');
console.timeEnd('5000000-getData2(calbck)');
});
출력 : 그것은 모두 당신의 기능은 동기 또는 비동기 여부에 내려 오는
D:\Test>node app.js
call getData1() start
call getData1() End
5000000-getData1(): 91ms
call getData2(calbck) start
call getData2(calbck) End
5000000-getData2(calbck): 76ms
D:\Test>node app.js
call getData1() start
call getData1() End
5000000-getData1(): 111ms
call getData2(calbck) start
call getData2(calbck) End
5000000-getData2(calbck): 78ms
첫 번째 IMO가 가장 간단합니다. 함수가 비동기 적이기 때문에이 예제에서는 콜백을 사용할 필요가 없습니다. – robertklep
테스트 코드가 –
인이 질문을 업데이트하여 성능을 기준으로 테스트하는 것이 정말로 중요합니다. 차이점은 (@robertklep에서 언급 한 것처럼) 콜백을 사용하는 후자의 함수는 비동기 실행을 위해 사용되는 것입니다. 예를 들어 일부 IO 작업이 완료 될 때까지 대기하는 경우입니다. –