Javascript 迭代数组的JS回调不';行不通
我对这个JS脚本有问题,因为好的Async老先生不喜欢我 尽管tocsv函数假定使用csvdata等待回调,但csv是在回调之前创建的,我得到一个空文件 我非常感谢你帮助我理解如何解决这个问题Javascript 迭代数组的JS回调不';行不通,javascript,callback,Javascript,Callback,我对这个JS脚本有问题,因为好的Async老先生不喜欢我 尽管tocsv函数假定使用csvdata等待回调,但csv是在回调之前创建的,我得到一个空文件 我非常感谢你帮助我理解如何解决这个问题 tocsv(站点,创建csv); //ITEREATE OVER FILE SITES.JS 函数tocsv(URL、回调){ 对于(变量i=0;i
tocsv(站点,创建csv);
//ITEREATE OVER FILE SITES.JS
函数tocsv(URL、回调){
对于(变量i=0;i<3;i++){
var theurl=url[i];
getData(URL、函数(页面标题){
csvdata.push([页面标题]);
});
};
回调(csvdata);
};
//从url获取标题
函数getData(url,回调){
csvdata=[];
$.get(url、函数(数据){
$(“标题”,数据)。每个(函数(){
页面标题=$(this.text();
});
回调(页面标题);
});
};
函数createcsv(thedata){
var数据=数据;
控制台日志(数据);
var csvContent=“数据:文本/csv;字符集=utf-8,”;
forEach(函数(infoArray,index){
dataString=infoArray.join(“,”);
csvContent+=索引
试试这个
var csvdata = [];
tocsv(sites, createcsv);
// ITEREATE OVER FILE SITES.JS
function tocsv(urls, callback) {
var count = 0
for (var i = 0; i < 3; i++) {
var theurl = urls[i];
getData(theurl, function(the_page_title) {
count++;
csvdata.push([the_page_title]);
if(count == 3) {
callback(csvdata);
}
});
};
};
// Get title from url
function getData(url, callback) {
$.get(url, function(data) {
$("title", data).each(function() {
the_page_title = $(this).text();
});
callback(the_page_title);
});
};
function createcsv(thedata) {
var data = thedata;
console.log(data);
var csvContent = "data:text/csv;charset=utf-8,";
data.forEach(function(infoArray, index) {
dataString = infoArray.join(",");
csvContent += index < data.length ? dataString + "\n" : dataString;
});
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "my_data.csv");
document.body.appendChild(link); // Required for FF
link.click(); // This will download the data file named "my_data.csv".
}
var csvdata=[];
tocsv(站点、创建CSV);
//ITEREATE OVER FILE SITES.JS
函数tocsv(URL、回调){
变量计数=0
对于(变量i=0;i<3;i++){
var theurl=url[i];
getData(URL、函数(页面标题){
计数++;
csvdata.push([页面标题]);
如果(计数=3){
回调(csvdata);
}
});
};
};
//从url获取标题
函数getData(url,回调){
$.get(url、函数(数据){
$(“标题”,数据)。每个(函数(){
页面标题=$(this.text();
});
回调(页面标题);
});
};
函数createcsv(thedata){
var数据=数据;
控制台日志(数据);
var csvContent=“数据:文本/csv;字符集=utf-8,”;
forEach(函数(infoArray,index){
dataString=infoArray.join(“,”);
csvContent+=索引
$。get
是异步的。您的tocsv
函数不能直接调用带有数据的callback
,因为tocsv
在数据可用之前返回。csvdata.push([页面标题])
您真的打算将数组推入csvdata
数组吗?不仅仅是一个条目?您的代码在多个地方都受到攻击。一定要在尽可能狭窄的范围内声明变量。这就是我添加callback@T.J.Crowder是的,稍后我将向csv添加更多参数