2017-01-22 2 views
0

함수가있어서 정보이 정의되지 않습니다.외부 변수로 콜백 결과를 사용합니다. 노드 js

var info = queryCollection(t,where,type,function(result){ 
     var rek=result; 
     return rek; 
    }); 

코드는 몽고 DB를

+0

queryCollection은 비동기 함수입니다 (대부분). 따라서 마지막으로 제공하는 매개 변수는 콜백입니다. 거기에는 많은 정보가 있으며, 이것이 무엇이며 어떻게 작동하는지 설명합니다. – newBee

+0

@newBee 이해해 주시겠습니까? –

답변

0

핵심 개념 중 하나, 동시성은, 자바 스크립트의 작동 방식을 기본적으로 요구하고있는 서버 측 노드 JS입니다. 이것은이 플랫폼의 범위를 벗어나므로 여러분이 구축하고자하는 것을 계속하기 전에 튜토리얼을 확인하시기 바랍니다. 이 beeing 내가 작은 예제를 설치했다.

https://jsfiddle.net/xavf01rn/

var myAsyncFunction = function(callback) { 
    console.log("Now in async function..."); 
    // set timeout is an function that is async. E.g. like your queryCollection fundtion 
    setTimeout(function(){ 
     console.log("Passing back the result to the callback!"); 
     callback("dummyResultValue"); 
    }, 0) 
    console.log("Now exiting async function..."); 
}; 

// note how we pass in a function as parameter. It will be called once the async action has completed 
var result = myAsyncFunction(function(asyncResult) { 
    console.log("Got result in async function callback:", asyncResult); // asyncResult has a value 
}); 

console.log("Result right after calling the myAsyncFunction function:", result); // result = undefined 

출력은 예상과 가능성이 다른 어느 다음과 같습니다. 이는 JS의 비동기 특성 때문입니다.

Now in async function... 
Now exiting async function... 
Result right after calling the myAsyncFunction function: undefined 
Passing back the result to the callback! 
Got result in async function callback: dummyResultValue 

왜 출력이 보이는 것처럼 보이는지 확인하십시오. 일단 당신이 이것을 이해했다 : 예! 언어를 매우 강력하게 만드는 가장 중요한 JS 개념 중 하나를 잘 알고 있습니다 (다른 이유로도).

+0

하지만 여전히 결과는 정의되지 않음 –

+0

그게 맞습니다. 그러나 결과는 콜백 함수에 알려져 있습니다. 이것이 JS가 작동하는 방식입니다. 당신이 달성하고자하는 것은 비동기 함수를 가진 나쁜 프로그래밍 스타일을 제외하고는 불가능합니다. – newBee

관련 문제