2016-08-15 77 views
0

所以這看起來像是一件基本的事情,但本週幾次導致額外的工作。如何在一個函數中定義一個變量並使其在所述函數之外可用。節點變量範圍

var variables = { initial: 'To Start'}; 
var curl = require('curlrequest'); 


var options = { 
    url: 'www.google.com', 
    verbose: true, 
    stderr: true 
}; 

curl.request(options, function (err, data) { 
    variables.testing123 = function() {return 'woking now';}; 
    variables.ting123 = 'I should be showing in console'; 
}); 

console.log(variables); 

控制檯輸出:

{ initial: 'To Start' } 

的目標是捲曲的URL和返回的JSON存儲到varialble到另一個函數用來理清最高分辨率,並建立從下載列表可用數據。腳本的後半部分已經準備就緒,但爲了動態地做到這一點,我需要捲曲幾個URL併爲每個URL過濾JSON。

+0

的問題是你想與同步異步函數工作。 –

回答

0

您傳遞給curl.request的函數是異步評估的,因此您在請求結束後要運行的任何內容都需要進入該函數。

var curl = require('curlrequest'); 
var variables = { initial: 'To Start'}; 
var options = { 
    url: 'www.google.com', 
    verbose: true, 
    stderr: true 
}; 

curl.request(options, function (err, data) { 
    variables.testing123 = function() {return 'woking now';}; 
    variables.ting123 = 'I should be showing in console'; 
    console.log(variables); 
}); 

如果你有一大堆的請求來處理,你可以使用的承諾,或做這樣的事情:

curl.request(options1, process); 
curl.request(options2, process); 
curl.request(options3, process); 
var requestsProcessed = 0; 
var results = []; 
function process(err, data) { 
    results.push(data); 
    requestsProcessed++; 
    if (requestsProcessed === 3) { 
     // do something 
    } 
}