簡體   English   中英

節點回調中的意外令牌功能

[英]Unexpected token function in node callback

我真的是節點和回調的新手。 我正在處理Nodeschool問題:使用回調順序返回三個給定URL的數據。 我將三個URL的結果放在一個對象中,以按順序跟蹤它們。 但是,我一直未能通過測試,因為我認為在將所有URL放入其中之前,將返回URL對象。

TLDR:

這是令人反感的功能。 它不斷告訴我“ SyntaxError:意外的令牌功能”。 但是,當我將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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM