2016-08-03 18 views
-2

からフィールドを抽出(hereを見つけた):私はjavascriptのSDKにSplunkを使用してこのコードの与えられたスニペットからフィールドを使用しようとしているこのスクリプト

// Search everything and return the first 100 results 
var searchQuery = "search * | head 100"; 

// Set the search parameters 
var searchParams = { 
    exec_mode: "normal", 
    earliest_time: "2012-06-20T16:27:43.000-07:00" 
}; 

// Run a normal search that immediately returns the job's SID 
service.search(
    searchQuery, 
    searchParams, 
    function(err, job) { 

    // Display the job's search ID 
    console.log("Job SID: ", job.sid); 

    // Poll the status of the search job 
    job.track({period: 200}, { 
     done: function(job) { 
     console.log("Done!"); 
     // Get the results and print them 
     job.results({}, function(err, results, job) { 
      var rows = results.rows; 
     //I want the 'rows' array 
     }); 

     }, 
     failed: function(job) { 
     console.log("Job failed") 
     }, 
     error: function(err) { 
     done(err); 
     } 
    }); 

    } 
); 

アイデアは、配列varaible「行を取得することです'このスニペットが実行された後、console.log(行)を実行することができます。

私の場合、以下の返品を追加することはできません。

答えて

0

rowsにグローバルにアクセスする場合は、var rows;をグローバルスコープで宣言し、rows = results.rows;を使用します。あなたはあなたが割り当てにvarキーワードを残していれば、実際に宣言する必要はありません。

上記の割り当ては非同期コールバックで呼び出されていますが、つまり、service.search(...)が返された直後には実行されていない可能性があります。場合によっては、関数が返ってから非同期関数がコールバックを長時間呼び出すことがあります。したがって、操作が完了した後にのみコードを実行したい場合は、そのコードをコールバックの中に入れてください。

+0

ありがとうございました。コールバックの中で 'console.log(行)'を追加する方法は?私は、関数のどの部分が非同期で、なぜその理由がわからないのですか。 –

+0

私は明示する必要があります、私の意図はapp.get(){[splunk api call];によって配列 '行'を送信することです。 resynch(); res.send(rows);}しかし、私はasynch関数の実行が終了した後でしかないと思います。 –

+0

最終コールバックは、呼び出される無名関数である 'function(err、results、job){...}'です。すべての非同期タスクの終わり。 'var rows = ...;'の直後に 'res.send(rows);を挿入してください。 'res'変数は囲みコードからキャプチャされます – qxz

関連する問題