2016-08-15 65 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 
    } 
}