【发布时间】:2018-07-16 04:39:39
【问题描述】:
我正在使用 node 来使用cheerio 从一个 url 中获取一些数据。
const request=require('request');
const cheerio=require('cheerio');
const Promise = require('promise');
函数getDataParms(parm1, parm2)
返回一个承诺对象。
getDataParms 被retrieveAllData(parm1, limit) 调用以获取一组变化的参数
最终输出来自于
var test2 = retrieveAllData('foo','2015');
console.log(test2);
node script.js 的输出
// [ Promise { _75: 0, _83: 0, _18: null, _38: null } ]
在某个地方我没有正确使用 Promise 方法,而且我不知道在哪里。我需要一些有经验的眼睛来帮助我找出我做错了什么。
代码:
const request=require('request');
const cheerio=require('cheerio');
const Promise = require('promise');
var dateVal = new Date();
var test2 = [];
function retrieveAllData(parm1, limit){
var output = [];
var intermediate;
for (var j=1; j <= limit; j++){
var objKey = parm1 + "_data";
var results = {
"data1": null,
[objKey]: null
};
results.data1 = j;
objKey = objKey + "_" + j;
results[objKey] = getDataParms(parm1, j).then(function(value){
//console.log(value);
return value;
});
//console.log(results[objKey]);
output.push(results[objKey]);
}
return output;
}
// Returns a Promise array
function getDataParms(parm1, parm2){
var sourceURL = "http://website/source=" + material + "&parm1=" + parm1 + "&parm2=parm2";
var parsedResults = [];
var metadata = {
record_parm2: time_period,
record_no: null,
record_date: null,
col1: null,
col2: null,
col3: null
};
return new Promise(function(fulfill, reject){
request(sourceURL, function(error,response,html){
if (error){
reject(error);
} else if (!error && response.statusCode == 200){
var $ = cheerio.load(html);
$(".data tr").each(function(i, element){
metadata.record_no = i;
$(this).find("td").each(function(cellindex){
switch(cellindex){
case 0:
metadata.record_date = $(this).text();
break;
case 1:
metadata.col1 = parseFloat($(this).text());
break;
case 2:
metadata.col2 = parseFloat($(this).text());
break;
case 3:
metadata.col3 = parseFloat($(this).text());
break;
}
});
parsedResults.push(metadata);
});
fulfill(parsedResults);
}
});
});
}
var test2 = retrieveAllData('foo','2015');
console.log(test2);
【问题讨论】:
-
不,我不是什么? 4.8.2
标签: javascript node.js promise es6-promise