2017-01-22 11 views
0

私には関数があり、の情報は未定義です。コールバックの結果をノード外の変数として使用するノードjs

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

コードはモンゴデシベル

+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の最も重要な概念の1つに精通していることは知っています(他の理由もあります)。

+0

しかし、まだ結果は定義されていません –

+0

その通りです。しかし、結果はコールバック関数で知られています。これがJSの仕組みです。あなたが達成しようとしていることは、非同期機能を持つ(悪いプログラミングスタイルを除いて)不可能です。 – newBee

関連する問題