Erste Antwort mit NodeJS Anfrage Modul

Ich gerade erst begonnen mit der twitch kraken api und ich habe ein paar Fragen.

Immer wenn ich Versuch ein JSON-Objekt gibt es keine Antwort. Ich bin versucht, führen Sie diese Funktion durch Amazon AWS Lambda, und haben keinen Zugang zu einer Konsole.

Im code unten meine callback-Funktion wird immer drucken „ERFOLG haben luftschlangen FEHLER“. Ich bin ziemlich sicher, dass jetzt der „FEHLER“ kommt aus meiner ersten Einstellung führen.

Wie kommt das Ergebnis nicht geändert in den korrekten JSON?

Habe ich verwendet, Briefträger und es gibt die richtige Sache mit dem query und param, und Kopfzeilen:

function getJSON(callback){
    var result = "ERROR";
    request.get(url(games[0]),function(error,response,body){
        console.log("requested for url: " + url(games[0]));
        var d = JSON.parse(body);
        result = d.streams[0];//.channel.display_name;
        //for(var i = 0; i < limit; i++){
        //    streamers.push(d.streams[i].channel.display_name)
        //}
        streamers.push(result);
    });
    if (streamers.length < 0){
        callback("ERROR");
    }else{
        callback("SUCCESS got streamers " + result);
    }
}

function url(game){
    return {
        url: "https://api.twitch.tv/kraken/streams/",//twitchlimit,
        qs : {
            'game' : 'overwatch',
            'limit' : 2
        },
        headers: {
            'Client-ID': clientID,
            'Accept': 'application/json',
            'Accept-Charset': 'utf-8',
        }
    };
}
  • Ihre if ... else gehört in die request.get Rückruf
  • Beachten Sie, dass eine 0 Länge array von Fäden ist nicht unbedingt ein Fehler. Wenn Sie die Abfrage für streams von einem Spiel, wo niemand ist streaming dann bekommst du wieder en leeres ResultSet. Sie können nie haben eine Länge von weniger als 0 in einem array.
  • ja den <0, ich dachte nicht, lol. Ich machte den Fehler <= 0; wie Es scheint, eine async-code problem von der anderen Kommentare
InformationsquelleAutor Mszauer | 2017-07-12



2 Replies
  1. 1

    Ich denke, dass Ihr Streamer-code

    if (streamers.length < 0){
        callback("ERROR");
    }else{
        callback("SUCCESS got streamers " + result);
    }

    sollten bereits bei der Anfrage Rückruf, da es derzeit nicht zu warten, für den Wunsch zu beenden, es ist nur die Durchführung auf, so dass damit der Wert der result wird sich nicht ändern. Auch die array-Länge darf nicht kleiner als 0, so wird es immer gehen, um die anderen und sagen „ERFOLG haben luftschlangen FEHLER“

    • dies ist, was ich dachte, nach einer Weile zu. werde es ausprobieren
  2. 0

    Danke Jungs für die Anregungen. Ich habe ein paar Flüchtigkeitsfehler ein und versuchte, Sie zu beheben.
    Ich habe umgesetzt du Vorschläge, und es scheint geklappt zu haben ein bisschen. Ich landete setzen die json.parse in einen try/catch-block, und zog die if/else-Anweisungen innerhalb des getJSON Methode. Jedoch, jetzt ich bekomme keine Ausgabe.

    Dies ist, wie ich bin Anrufung der getJSON Methode:

    function handleGameResponse(intent,session,callback){
        //gets the game
        var game = intent.slots.game.value;
        if (!games.includes(game)){
            var speechOutput = "You asked for: " + intent.slots.game.value;
            //var speechOutput = "You asked for: " + games[game] + " That game is currently not an option. These are your current options: " + arrayToString(games)
            var repromptText = "Please ask one from the current options.";
            var header = "Invalid Game";
    
        }else {
            getJSON(function(data){
                if(data !== "ERROR"){
                    var speechOutput = data; //capitalizeFirst(game) + " top three streamers are: " + arrayToString(streamers) + '.';
                    var repromptText = "Do you want to hear more about games?";
                    var header = capitalizeFirst(game);
                }else{
                    var speechOutput = "I'm sorry, something went wrong and I could not get the streamers.";
                }
                //speechOutput = data;
            });
            //speechOutput = games[0] + " games[0], game= " + game; //this executes so the getJSON isn't executing
        }
        var shouldEndSession = false;
        callback(session.attributes,buildSpeechletResponse(header,speechOutput,repromptText,shouldEndSession));
    }

    Hat die oben gleich auszuführen? Wie in der shouldEndSession und callback ausgeführt werden soll, bevor die getJSON hat Zeit, um eine Antwort zu geben?

    Für ref, das ist die getJSON Methode jetzt:

    function getJSON(callback){
        var result = "ERROR";
        request.get(url(games[0]),function(error,response,body){
            try{
                var d = JSON.parse(body);
            } catch (err){
                callback("Sorry, something seems to have malfunctioned while getting the streamers");
            }
            result = d.streams[0].channel.display_name;
            //for(var i = 0; i < limit; i++){
            //    streamers.push(d.streams[i].channel.display_name)
            //}
            streamers.push(result);
            if (streamers.length <= 0){
                callback("ERROR");
            }else{
                callback("SUCCESS got streamers " + result);
            }
        });
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.