节点回调中的意外标记函数
Unexpected token function in node callback
我对节点和回调真的很陌生。我正在处理一个 Nodeschool 问题:使用回调 return 三个给定 URL 的数据。我将三个 URL 的结果放在一个对象中,以便按顺序跟踪它们。然而,我一直未能通过测试,因为我认为,在我将所有 URL 放入其中之前,URL 对象正在被 returned。
TLDR:
这是有问题的函数。它一直告诉我 "SyntaxError: Unexpected token 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 storeUrl(url, info, callback) {
console.log(url);
callback();
}
我建议不要尝试同时学习 Node 和 Javascript。学习 Javascript 基础知识和调试,然后是回调,然后是处理 Node。
我对节点和回调真的很陌生。我正在处理一个 Nodeschool 问题:使用回调 return 三个给定 URL 的数据。我将三个 URL 的结果放在一个对象中,以便按顺序跟踪它们。然而,我一直未能通过测试,因为我认为,在我将所有 URL 放入其中之前,URL 对象正在被 returned。
TLDR:
这是有问题的函数。它一直告诉我 "SyntaxError: Unexpected token 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 storeUrl(url, info, callback) {
console.log(url);
callback();
}
我建议不要尝试同时学习 Node 和 Javascript。学习 Javascript 基础知识和调试,然后是回调,然后是处理 Node。