在请求内部等待请求完成
Waiting for a request to finish inside a request
我有一个代码,从另一个网站请求数据(获取链接),我获取链接后,我会从这些链接获取一些数据。所以,我试着做2个请求。
下面是我编写的伪代码。
[first request to the site]
..fetch links and data
....fetch more data from the fetched links
[done]
[another function to fetch data from the links fetched]
..fetch data
[return fetch data]
我试图得到这样的输出:
{
"chimchar" : {
"articles" : [{
"id": id,
"title": title,
"url": url
}]
}
}
但是'url'的值没有显示,我尝试将其登录到控制台,'url'的值未定义,并且在从. gethome函数发出所有请求后显示。
下面是代码
var cheerio = require('cheerio');
var requestify = require('requestify');
var _response;
/*
getHome
*/
exports.getHome = function(req, res) {
requestify.get('http://chimchar.com').then(function(response) {
var __response = processResponse(response);
res.send(__response);
});
}
/*
processResponse
*/
function processResponse(response) {
var id = 0;
var title, url;
_response = {
'chimchar': {
'articles': []
}
};
response.getBody();
$ = cheerio.load(response.body);
$('#scenesContainer .video_box').each(function() {
$(this).find('img, a').each(function(i, elem) {
if ($(this).is('img') && $(this).attr('style') == 'margin-top: 35px;')
title = $(this).attr('alt');
if ($(this).is('a') && $(this).attr('class') == 'link_block') {
fetchPage($(this).attr('href'), function(returnValue) {
url = returnValue;
console.log(url);
});
}
});
_response.chimchar.articles.push({
"id": id,
"title": title,
"url": url,
});
id = id + 1;
});
return _response;
}
var fetchPage = function(page, callback) {
console.log('fetchPage');
requestify.get('http://chimchar.com' + page).then(function(response) {
var r;
response.getBody();
$ = cheerio.load(response.body);
$('.play_video').each(function() {
$(this).find('a').each(function(i, elem) {
if ($(this).is('a') && $(this).text().indexOf('MP4') > -1) {
r = $(this).attr('href');
console.log(r);
}
});
});
console('fetchPage finished - ' + r);
callback(r);
});
};
我想
return _response;
触发,然后url在processResponse函数
中获得我认为你需要使用async,代码看起来像这样
function processResponse(response, callback) {
async.each([items], function (item, cb) {
doSomething(item, function () {
//Make all operations with response
cb(null, true)
});
},
function (err, result) {
callback(_response)
})
}
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- ajax请求的顺序总是不同的
- 如何解决“;错误所请求的URL返回500-内部服务器错误”;
- 如何在 AJAX 请求中编写内部 URL
- 内部服务器错误在 post 请求中使用 Angular js 中的自定义服务
- 为什么我的 rails AJAX 请求会抛出内部服务器错误
- XHR 请求上的 500 内部服务器错误
- Javascript OOP-jQuery调用;这个“;ajax请求内部
- Getting 500:从javascript发送http请求时,来自Web服务器的响应出现内部服务器错误
- 函数内部的HTTP请求不起作用
- 在运行ajax请求时,无法将内部html设置为null
- Javascript加密和安全:避免检查内部请求url
- 签发Koa的内部请求
- 使用正确的数组响应HTTP请求时出现问题.使用expressjs从函数内部发送结果的可能方法
- 在请求内部等待请求完成
- AJAX请求不能在内部服务器上工作
- 节点express请求调用内部get
- $http.get请求内部有多个$http.gt请求,但运行不正常
- 为什么Laravel上的AJAX GET/POST会“;内部服务器错误”;当我尝试将数据用于数据库请求时
- 取决于内部带有 ajax 请求的循环