Estoy jugando con promesas y modifiqué un script de Medio.

Cuando ejecuto el script, solicita el código y luego muestra los datos json antes de que pueda ingresar un valor. Luego ingresé un valor sin el mensaje para que salga el script.

¿Cómo puedo obtener la entrada antes de que funcione la llamada a la API?


'use strict'

const request = require('request')
const readline = require('readline')
let userDetails

const getInput = prompt => new Promise( resolve => {
    const io = { input: process.stdin, output: process.stdout }
    const read = readline.createInterface(io)
    read.question(`${prompt}: `, data => {
        console.log(data)
        read.close()
        resolve(data)
    })
})

const getData = () => new Promise( (resolve, reject) => {
    const options = {
        url: 'https://api.github.com/users/marktyers',
        headers: {
            'User-Agent': 'request'
        }
    }
    // Do async job
    request.get(options, (err, resp, body) => {
        if (err) reject(err)
        else resolve(JSON.parse(body))
    })
})

function main() {
    const GitHubAPICall = getData()
    const getBase = getInput('input base currency')
    GitHubAPICall
        .then(result => {
            userDetails = result
            console.log('Initialized user details')
            console.log(userDetails)
        }).then(getBase)
        .catch(err => console.log(err))
}

main()
-1
Mark Tyers 15 oct. 2019 a las 13:41

1 respuesta

La mejor respuesta

En su función principal, puede hacerlo así:

function main() {
    const GitHubAPICall = getData; // WITHOUT ()
    const getBase = getInput; // Those 2 declarations are useless, btw

    GitHubAPICall()
        .then(result => {
            userDetails = result
            console.log('Initialized user details')
            console.log(userDetails)
        })
        .then(() => getBase())
        .then(data => // Do something with the data returned by 'getInput')
        .catch(err => console.log(err))

}
0
Andrei Panturu 15 oct. 2019 a las 11:00