Javascript 承诺以错误的顺序解决

Javascript 承诺以错误的顺序解决,javascript,node.js,asynchronous,es6-promise,Javascript,Node.js,Asynchronous,Es6 Promise,我在玩承诺游戏,修改了一个脚本 当我运行脚本时,它会提示输入代码,然后在输入值之前显示json数据。然后输入一个值,但不提示脚本退出 如何在API调用工作之前获取输入 'use strict' const request = require('request') const readline = require('readline') let userDetails const getInput = prompt => new Promise( resolve => {

我在玩承诺游戏,修改了一个脚本

当我运行脚本时,它会提示输入代码,然后在输入值之前显示json数据。然后输入一个值,但不提示脚本退出

如何在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()

在主要功能中,您可以这样做:

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))

}

在调用getData和getInput之前,您忘记了
return
,这些调用会返回一个承诺,代码会愉快地运行,而不必等待这些承诺兑现resolve@SaeedJalali-您永远不需要在承诺执行器中返回resolve。此外,
getBase
是承诺,而不是函数,因此
。然后(getBase)
是否有人可以发布此应用程序的工作代码?我正在努力实施反馈建议。