【发布时间】:2015-11-13 05:19:27
【问题描述】:
我正在尝试重新创建我在 Node/js 中编写的 Python 脚本,但我无法完全理解异步/回调方式。
脚本相当简单,使用两个基本的 HTTP 请求到 eBay 的 API。第一个请求获取生成的项目 ID 列表,然后第二个请求获取每个项目的特定信息(描述/列表信息等)。在 Python 中,这相当简单,我使用了一个简单的循环。无论如何,它并不快,但它确实有效。
然而,在 javascript 中,我正在努力获得相同的功能。我现在的代码如下:
var ebay = require('ebay-api');
var params ={};
params.keywords = ["pS4"];
var pages = 2;
var perPage = 2;
ebay.paginateGetRequest({
serviceName: 'FindingService',
opType: 'findItemsAdvanced',
appId: '',
params: params,
pages: pages,
perPage: perPage,
parser: ebay.parseItemsFromResponse
},
function allItemsCallback(error,items){
if(error) throw error;
console.log('FOUND', items.length, 'items from', pages, 'pages');
for (var i=0; i<items.length; i++){
getSingle(items[i].itemId);
}
}
);
function getSingle(id){
console.log("hello");
ebay.ebayApiGetRequest({
'serviceName': 'Shopping',
'opType': 'GetSingleItem',
'appId': '',
params: {
'ItemId': id ,
'includeSelector': 'Description'
}
},
function(error, data) {
if (error) throw error;
console.dir(data); //single item data I want
}
);
}
这是许多尝试中的一种,但我收到了“检测到可能的 EventEmitter 内存泄漏”警告,它最终以“错误:错误的“确认”代码未定义的错误消息?null”而中断。我相当确定这只是与正确使用回调有关,但我不确定如何正确处理它。任何答案或帮助将不胜感激。如果这不是一个好问题,我深表歉意,如果是,请告诉我如何正确提问。
【问题讨论】:
-
看看使用类似node-async 的东西来执行此操作 - 它可以为您处理循环并管理完成回调。
-
我的理解是请求将被处理 -> 生成响应 -> 回调被调用 -> 为每个项目处理 2ndRequest。这不是一般的数据流吗?
-
不。写一个描述它的答案。
-
welp.. 抱歉,我是一名实习生,想尽可能多地学习,而且我对 Web 开发不熟悉哈哈
标签: javascript node.js http asynchronous callback