2016-08-03 55 views
-2

我想使用的Splunk的JavaScript SDK使用領域從這個代碼片斷給出一個提取字段(發現here):從這個腳本

// 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(rows)'?我不清楚函數的哪部分是異步的,爲什麼。 –

+0

我應該澄清,我的意圖是通過app.get(){[splunk api call];發送數組'行'; res.send(rows);},但是我猜只有在異步函數完成執行後 –

+0

你最後的回調是'function(err,results,job){...}',這是一個匿名函數,所有異步任務的結束。緊跟在'var rows = ...;'insert'res.send(rows);'你應該很好走;從封裝代碼中「res」變量被「捕獲」 – qxz