Extract/Return 来自请求的变量 - Javascript
Extract/Return var from Request - Javascript
我是 Node.js 的新手,我正在尝试使用在请求中声明的变量,但我需要在 Request.Is 之外使用它,这可能吗?
示例代码:
//stackExample
var request = require('request')
cheerio = require('cheerio')
jsonArr = []
request ({
url: 'http://youtube.com',
encoding: 'utf8'
},
function (err, resp, body){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(body);
$('.yt-lockup-title').each(function(){
var title = $(this).find('a').text();
jsonArr.push({
titulo: title,
});
});
}
console.log(jsonArr) //Here Works!
}
);
console.log(jsonArr) //Here not :(, I need works here :'(
上面代码的问题在于,当来自http调用的请求returns时,jsonArr中的值被推送,然后将值注入到jsonArr中。
您希望在该调用后访问 jsonArr 的值 returns.Which 您可以使用 promises 来实现。
或者只是使用 setTimeout 进行黑客攻击。
setTimeout(function(){
console.log(jsonArr); // use value after time interval
},1000); // you can set this value depending on approx time it takes for your request to complete.
或者使用延迟函数libraries refer this。
var sequence = Futures.sequence();
sequence
.then(function(next) {
http.get({}, next);
})
.then(function(next, res) {
res.on("data", next);
})
.then(function(next, d) {
http.get({}, next);
})
.then(function(next, res) {
...
})
您需要将 console.log
包装在回调中,如下所示。
下面的代码会记录[5]
var jsonArry = [];
var test = function(num, callback){
jsonArry.push(num);
callback(jsonArry);
};
test(5, function(data){
console.log(data);
});
你的 jsonArr
变量只在你的请求函数内部起作用,因为它等待 url 响应,而你的外部 console.log 它逐行执行。您可以创建一个将在匿名函数内部调用的函数,以便在请求函数之外使用它。
var request = require('request')
cheerio = require('cheerio')
jsonArr = []
request ({
url: 'http://youtube.com',
encoding: 'utf8'
},
function (err, resp, body){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(body);
$('.yt-lockup-title').each(function(){
var title = $(this).find('a').text();
jsonArr.push({
titulo: title,
});
updated()
});
}
console.log(jsonArr)
}
);
function updated(){
console.log(jsonArr)
}
我是 Node.js 的新手,我正在尝试使用在请求中声明的变量,但我需要在 Request.Is 之外使用它,这可能吗?
示例代码:
//stackExample
var request = require('request')
cheerio = require('cheerio')
jsonArr = []
request ({
url: 'http://youtube.com',
encoding: 'utf8'
},
function (err, resp, body){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(body);
$('.yt-lockup-title').each(function(){
var title = $(this).find('a').text();
jsonArr.push({
titulo: title,
});
});
}
console.log(jsonArr) //Here Works!
}
);
console.log(jsonArr) //Here not :(, I need works here :'(
上面代码的问题在于,当来自http调用的请求returns时,jsonArr中的值被推送,然后将值注入到jsonArr中。
您希望在该调用后访问 jsonArr 的值 returns.Which 您可以使用 promises 来实现。
或者只是使用 setTimeout 进行黑客攻击。
setTimeout(function(){
console.log(jsonArr); // use value after time interval
},1000); // you can set this value depending on approx time it takes for your request to complete.
或者使用延迟函数libraries refer this。
var sequence = Futures.sequence();
sequence
.then(function(next) {
http.get({}, next);
})
.then(function(next, res) {
res.on("data", next);
})
.then(function(next, d) {
http.get({}, next);
})
.then(function(next, res) {
...
})
您需要将 console.log
包装在回调中,如下所示。
下面的代码会记录[5]
var jsonArry = [];
var test = function(num, callback){
jsonArry.push(num);
callback(jsonArry);
};
test(5, function(data){
console.log(data);
});
你的 jsonArr
变量只在你的请求函数内部起作用,因为它等待 url 响应,而你的外部 console.log 它逐行执行。您可以创建一个将在匿名函数内部调用的函数,以便在请求函数之外使用它。
var request = require('request')
cheerio = require('cheerio')
jsonArr = []
request ({
url: 'http://youtube.com',
encoding: 'utf8'
},
function (err, resp, body){
if(!err && resp.statusCode == 200){
var $ = cheerio.load(body);
$('.yt-lockup-title').each(function(){
var title = $(this).find('a').text();
jsonArr.push({
titulo: title,
});
updated()
});
}
console.log(jsonArr)
}
);
function updated(){
console.log(jsonArr)
}