NodeJS无法异步发出GET请求
NodeJS unable to make a GET request asynchronously
我是Nodejs和异步编程的新手。我在异步函数中执行GET请求时遇到问题。我在这里发布整个代码。我正在尝试提取所有Url的列表,将它们添加到列表中,并将列表发送给另一个函数进行处理。
我的问题是处理它们。Inturn对于每个url,我正在执行一个GET请求,以获取正文并在其中查找图像元素。我希望将图像url作为GET参数传递给第三方api。我无法执行GET请求,因为控件似乎根本无法到达那里。
var async = require("async"),
request = require("request"),
cheerio = require("cheerio");
async.waterfall([
function(callback) {
var url = "someSourceUrl";
var linkList = [];
request(url, function(err, resp, body) {
var $ = cheerio.load(body);
$('.list_more li').each(function() {
//Find all urls and add them to a list
$(this).find('a').each(function() {
linkList.push($(this).attr('href'));
});
});
callback(null, linkList);
});
},
//pass all the links as a list to callback
function(liksListFetched, callback) {
for (var i in liksListFetched) {
callback(null, liksListFetched[i]);
}
}],
//***********My problem is with the below code**************
function(err, curUrl) {
var cuResp = "";
console.log("Currently Processing Url : " + curUrl);
request(curUrl, function(err, resp, body) {
var $ = cheerio.load(body);
var article = $("article");
var articleImage = article.find("figure").children('img').attr('src');
var responseGrabbed = "API response : ";
//check if there is an IMG element
if (articleImage === undefined) {
console.log("No Image Found.");
articleImage = 'none';
}
else {
//if there is an img element, pass this image url to an API,
//So do a GET call by passing imageUrl to the API as a GET param
request("http://apiurl.tld?imageurl=" + articleImage, function(error, response, resp) { //code doesn't seem to reach here
I would like to grab the response and concatenate it to the responseGrabbed var.
console.log(resp);
responseGrabbed += resp;
});
}
console.log(responseGrabbed);// api response never gets concatenated :(
console.log("_=_=_=_=_=_=__=_=_=_=_=_=__=_=_=_=_=_=__=_=_=_=_=_=_");
process.exit(0);
});
});
如果有人能帮助我了解根本原因,我将不胜感激。提前谢谢。
request()
是异步的,所以当您在控制台记录字符串时,字符串还没有构建,您必须在回调中进行控制台日志:
request("http://apiurl.tld?imageurl=" + articleImage, function(error, response, resp) {
responseGrabbed += resp;
console.log(responseGrabbed);// api response never gets concatenated :(
console.log("_=_=_=_=_=_=__=_=_=_=_=_=__=_=_=_=_=_=__=_=_=_=_=_=_");
});
终止过程也是如此,应该在所有请求都完成
相关文章:
- 有没有一种方法可以防止img get请求使用css或js发生
- jQuery Ajax GET请求工作不正常
- 将GET请求(HTML字符串)转换为完整的DOM对象
- 如何在nightwatch.js中发送ajax get请求
- 当我在chrome中切换设备模式时,$http.get请求失败
- 根据GET请求的结果自定义页面内容
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- Codeigniter JQuery在JQuery.get请求后动态加载视图中的数据
- 如果我对一个文件发出ajax GET请求,我会得到什么以及如何将其添加到页面中
- JQuery AJAX 在 GET 请求完成时返回 XML
- AngularJS $http GET 请求到本地 JSON 文件返回语法错误:意外令牌]
- 嵌套在 .get 请求中的 jQuery 不会执行
- 如何在 GET 请求中序列化查询的对象
- 对服务器的 GET 请求返回 net::ERR_CONNECTION_REFUSED
- GET 请求在 javascript 中到 NodeJS
- 无法在角度 js 中将参数传递给 http get 请求
- Ajax GET 请求的 URL 失败,但 hurl.it 相同 URL 的 GET 请求有效.什么给
- Atlasboard在GET请求中给了我500
- 带有正文的Amplifyjs GET请求
- Rails4:是否可以将Ajax.get请求发送到相同的当前页面控制器