Problem med att få async och await att fungera

  • Författare
  • Meddelande

Xkernel

nykomling

  • Inlägg: 1
  • Blev medlem: 07 feb 2019, 15:45

Problem med att få async och await att fungera

Inlägg07 feb 2019, 15:51

Hej! Jag kommer med lite kod som jag inte får att fungera.
När jag exekverar main med node så väntar inte funktionerna på varandra utan när jag ska mata in en söksträng för en viss funktion visas console.log för en annan funktion. Har bifogat en bild. MVH

Main
Kod: Markera allt
/*
*Main
*@author Henrik Thomasson
*
*
*/
"use strict";
const mysql = require("promise-mysql");
const config = require("./config.json");
const between = require("./between.js");
const search = require("./search.js");
const teachers = require("./teacher.js");
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
((async function(){
await selectTeachers();
await searchTeachers();
await searchBetween();
}))();


async function selectTeachers(){
   await teachers.startUp();
};

async function searchTeachers(){
   await search.startUp();
};

async function searchBetween(){
    await between.startUp();
};


Kod: Markera allt
/*
*@author Henrik Thomasson
*Made @ BTH 2019
*
*
*/
"use strict";

module.exports = {
    "searchBetween": searchBetween,
    "startUp": startUp
}

const mysql = require("promise-mysql");
const config = require("./config.json");

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

async function startUp() {
    const db = await mysql.createConnection(config);
    let str;

    console.log("Start with Min and Max");

    rl.question("Enter min: ",  (min) => {
         rl.question("Enter max: ",  (max) => {
            str =  searchBetween(db, min, max);

            rl.close();
            db.end();
        });


    });
};

async function searchBetween(db, min, max) {
    const tableB = require("./tableBetween.js");
    let res;
    let sql;
    let str;
    //let maxi = max;
    // let mini = min;
    console.info(`Searching for values between ${min} and ${max} `);

    sql = `
        SELECT
            akronym,
            fornamn,
            efternamn,
            avdelning,
            kompetens,
            lon
        FROM larare
            WHERE
                lon > ${min} AND lon < ${max}
            OR
                 kompetens > ${min} AND kompetens < ${max}
        ORDER BY lon;
            `;
   
    res = await db.query(sql);

    str = await tableB.betweenAsTable(res);
    console.info(str);
    return str;
}


Kod: Markera allt
/**
*
* @author Henrik Thomasson
* Made 2019 @ BTH
* Show teachers and their departments
*
*/

module.exports = {
    "startUp": startUp
}



const mysql = require("promise-mysql");
const config = require("./config.json");

const readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});

async function startUp() {
    const db = await mysql.createConnection(config);
    let str;
   
   
    rl.question("What to search for? ", async (search) => {
        str = await searchTeachers(db, search);
        console.info(str);
       
        rl.close();
        db.end();
    });
};

async function searchTeachers(db, search){
    let sql;
    let res;
    let str;
    let like = `%${search}%`;
   
    console.info(`Searching for: ${search}`);
   
  sql = `
        SELECT
            akronym,
            fornamn,
            efternamn,
            kompetens,
            avdelning,
            lon
        FROM larare
        WHERE
            akronym LIKE ?
            OR fornamn LIKE?
            OR efternamn LIKE?
            OR avdelning LIKE?
            OR lon LIKE?
           
        ORDER BY akronym;
            `;
    res = await db.query(sql, [like, like, like, like, search]);
    str = await teacherAsTable(res);
    return str;
};

function teacherAsTable(res) {
    let str;

    str = "+--------+---------------------------+-----------+------+----+\n";
    str += "|Akronym |Namn                       |Avdelning  |Lön   |Komp|\n";
    str += "|--------|---------------------------|-----------|-----------|\n";
    for (const row of res) {
        str += "| ";
        str += row.akronym.padEnd(7);
        str += "| ";
        str += (row.fornamn + " " + row.efternamn).padEnd(26);
        str += "| ";
        str += row.avdelning.padEnd(10);
        str += "| ";
        str += row.lon.toString().padEnd(5);
        str += "| ";
        str += row.kompetens.toString().padEnd(2);
        str += " |\n";

    }
    str += "+--------+---------------------------+-----------+-----------+\n";
    console.info(str);

};


Kod: Markera allt
/*
*
*@author Henrik Thomasson
*Made 2019 @ BTH
*
*Module for the "search teacher" function.
*/
"use strict";
const mysql = require("promise-mysql");
const config = require("./config.json");
module.exports = {
    "startUp": startUp
}

async function startUp(){
    await selectTeachers();
}

async function selectTeachers(){
    let table = require("./teacherAsTable.js"); //Module to print the teachers as a table
    const db = await mysql.createConnection(config);
    let sql;
    let res;
    let str;

    sql = `
        SELECT
            akronym,
            fornamn,
            efternamn,
            avdelning,
            kompetens,
            lon,
            fodd
        FROM larare
        ORDER BY akronym;
            `;
    res = await db.query(sql);
    str = table.teacherAsTable(res);
    return str;
    db.end();
}

Bilagor
exempelbild.PNG
exempelbild.PNG (21.79 KiB) Visad 2557 gånger
Användarvisningsbild

mos

dbwebb

  • Inlägg: 11199
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Problem med att få async och await att fungera

Inlägg07 feb 2019, 16:47

Man behöver avgränsa och se vilken del av koden som är felkällan.

Nu har du listat all kod för hela uppgiften, det blir en del kod att gå igenom. I din körning (bilden) visar du ett specifikt användarfall.

Fokusera på det specifika användarfallet, vilka kodrader är iblandade?.

Om det underlättar så kommenterar du bort all annan kod så du enbart har koden för det felande användarfallet kvar.

Du kan också vilja gå tillbaka till uppgiften. Du skall skapa 3 olika program, i tre olika namngivna filer. Varje fil har sitt eget mainprogram. Du skall inte köra alla tre program inuti ett main-program, det är något vi kikar på i nästa kmom.
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 6 gäster