javascript - 与 promise 中的 .then() 混淆

标签 javascript asynchronous promise resolve

我是 js 新手,正在学习 promises。我想出了这段代码,它将打印每个函数的解析值,并使用 .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))

但是,我没有得到预期的结果,我认为 .then() 中的所有语句都需要执行并解析才能继续下一个 .then()声明。但显然这里不是这种情况,因为我得到以下输出 -

{ username: 'default' }
undefined
undefined

但我希望输出与此类似 -

{username : 'default}
['vid1', 'vid2']
desc

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

最佳答案

当您调用这些函数时,您需要将 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))

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

关于javascript - 与 promise 中的 .then() 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64187045/

相关文章:

javascript - 为什么我的输入值不求和?

ios - 调度组 : for-loop *and* async calls within the for-loop

javascript - 在循环内 promise 后返回数组

javascript - 从执行函数返回 promise ?

angularjs - Angular UI Bootstrap Typeahead - 未显示异步结果

javascript - 如何评论包含正则表达式的 block

javascript - 带有 iron-ajax 响应的 promise

javascript - 实时进度条

javascript - 状态内 react 组件的动态加载

javascript - 将 JSON 输出的值添加到 JavaScript 变量上,在循环或异步上失败?