与 .then() 混淆

def*_*303 2 javascript asynchronous resolve promise

我是 js 的新手,我正在学习 Promise。我想出了这段代码,它将打印每个函数的解析值,并使用.then


function login() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {

            resolve({username : 'default'})
        }, 1000)
    })
}

function getVideos() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(['vid1', 'vid2'])
        },1000)
    })
}

function getDesc() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {

            resolve('desc')
        }, 1000)
    })
}


const test = login()
test.then(res => {
    console.log(res)
    getVideos()
})
.then(res => {
    console.log(res)
    getDesc()
})
.then(res => console.log(res))
Run Code Online (Sandbox Code Playgroud)

但是,我没有得到预期的结果,我认为.then()需要执行所有语句并决定继续下一个.then()语句。但显然情况并非如此,因为我得到以下输出 -

{ username: 'default' }
undefined
undefined
Run Code Online (Sandbox Code Playgroud)

但我希望输出与此类似 -

{username : 'default}
['vid1', 'vid2']
desc
Run Code Online (Sandbox Code Playgroud)

请指出我在这里出错的地方。任何帮助表示赞赏,非常感谢

小智 5

return当您调用这些函数时,您需要添加到链内。例如:

function login() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {

            resolve({username : 'default'})
        }, 1000)
    })
}

function getVideos() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(['vid1', 'vid2'])
        },1000)
    })
}

function getDesc() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {

            resolve('desc')
        }, 1000)
    })
}


const test = login()
test.then(res => {
    console.log(res)
    return getVideos()
})
.then(res => {
    console.log(res)
    return getDesc()
})
.then(res => console.log(res))
Run Code Online (Sandbox Code Playgroud)

这是一个很好的指南:https : //javascript.info/promise-chaining