首页 > 解决方案 > 如何按顺序执行承诺?

问题描述

我无法让我的代码按顺序工作。我需要先进行连接测试,最后还要解析函数,以便形成一个文本字符串,该字符串将在带有 NPM 包的推文中发送。(这不是我的真实代码,这是一个总结示例)

我尝试了很多事情,我的大脑着火了

// Test DB conection
db.authenticate()
    .then(() => {
        const server = http.createServer(app)
        server.listen(config.port, () => {
            console.log(`http://localhost:${config.port}`)
        })
        reload(app)
})
.catch(err => {
    console.log(`Error: ${err}`)
})

// Functions
resumen.man = (numRoom) => {
    const registries = Registries.findOne({})
    .then((registries) => {
        return registries.name+' is good.'
    })
}
resumen.man1 = (numRoom) => {
    const registries = Registries.findOne({})
    .then((registries) => {
        return registries.name+' is bad.'
    })
}
resumen.man2 = (numRoom) => {
    const registries = Registries.findOne({})
    .then((registries) => {
        return registries.name+' is big.'
    })
}

// Execute resumen.man(1) first and save text in $varStringMultiLine ?
// Execute resumen.man1(1) later and save text in the same $varStringMultiLine ?
// Execute resumen.man2(1) last and save text in the same $varStringMultiLine ? 

sendTweet($varStringMultiLine)

谢谢。

标签: javascriptsequelize.js

解决方案


正如@Barmar 和@some 所评论的那样,您可以使用.then或使用async/链接承诺await。我会推荐后者,因为.then-chaining 会很快变得笨拙。

async这是对/的一个非常好的解释awaithttps ://javascript.info/async-await

基本上,您可以使用

await db.authenticate();

在 promise 解决之前暂停代码并且不执行下一行。但是,为了不冻结整个执行,这本身需要在 Promise 中异步完成。


推荐阅读