Javascript 承诺以错误的顺序解决
我在玩承诺游戏,修改了一个脚本 当我运行脚本时,它会提示输入代码,然后在输入值之前显示json数据。然后输入一个值,但不提示脚本退出 如何在API调用工作之前获取输入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 => {
'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)
是否有人可以发布此应用程序的工作代码?我正在努力实施反馈建议。