节点callback中令人意外的令牌function

我对节点和callback是非常新的。 我正在处理Nodeschool问题:使用callback函数按顺序返回三个给定URL的数据。 我把这三个URL的结果放在一个对象中,以便跟踪它们。 但是,我一直在testing失败,因为我认为,在我把所有的URL放入它之前,URL对象被返回。

TLDR:

这是违规的function。 它一直告诉我“SyntaxError:意外的标记function”。 但是当我把console.log(urlObj[url])放到它自己的函数中,并在storeUrl通过名称调用它时,我不认为它是在if语句之后运行的。

 function storeUrl(url, info, function(url) { // Only log after all the checking is done console.log(urlObj[url]); } ){ // add data to a dict? or something? // to keep track of them??? if(url == url1){ urlObj[url1] = info; } if(url == url2){ urlObj[url2] = info; } if(url == url3){ urlObj[url3] = info; } } 

这是我的整个文件:

 var http = require('http'); var bl = require('bl'); var url1 = process.argv[2]; var url2 = process.argv[3]; var url3 = process.argv[4]; var urlObj = {}; urlObj[url1] = ''; urlObj[url2] = ''; urlObj[url3] = ''; function firstUrl(callback, callback){ getHttp(url1); callback(url2); callback(url3); } function startItOff(){ firstUrl(function secondUrl(contents){ getHttp(contents); }, function thirdUrl(contents){ getHttp(contents); }); // This is what I ultimately want: // A log of the data of each URL, in order, on its own line: for (item in urlObj){ console.log(urlObj[item]); } } ////////////// // Above this line is ok, // now trying to retrieve the url only after // getting the right one. The getHttp shows // them in the right order, but retrieveHttp // doesn't have an order to it. ///////////// function getHttp(url){ middleman(url, retrieveHttp); } function middleman(url, callback){ callback(url); } function retrieveHttp(url){ http.get(url, function(res){ res.setEncoding('utf8'); res.pipe(bl(function(err,data){ if (err) return Error('Error'); storeUrl(url, data.toString(), callback); })); }); } function storeUrl(url, info, function(url) { console.log(urlObj[url]); } ){ // add data to a dict? or something? // to keep track of them??? if(url == url1){ urlObj[url1] = info; } if(url == url2){ urlObj[url2] = info; } if(url == url3){ urlObj[url3] = info; } // Also trying to log the data from the URLs here: console.log(urlObj[url1]); } startItOff(); 

这行是一个语法错误:

 function storeUrl(url, info, function(url) { // Only log after all the checking is done --> 

所以当Node说它有一个语法错误时,它不会说谎:)。 当你正在为你正在做的function定义参数时,你不能包含单词function。

这将是有效的语法:

 function storeUrl(url, info, callback) { console.log(url); callback(); } 

我build议不要同时学习Node和Javascript。 学习Javascript的基本知识和debugging,然后callback,然后解决节点。