javascript - 如何按顺序执行承诺?
问题描述
我无法让我的代码按顺序工作。我需要先进行连接测试,最后还要解析函数,以便形成一个文本字符串,该字符串将在带有 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)
谢谢。
解决方案
正如@Barmar 和@some 所评论的那样,您可以使用.then
或使用async
/链接承诺await
。我会推荐后者,因为.then
-chaining 会很快变得笨拙。
async
这是对/的一个非常好的解释await
:https ://javascript.info/async-await
基本上,您可以使用
await db.authenticate();
在 promise 解决之前暂停代码并且不执行下一行。但是,为了不冻结整个执行,这本身需要在 Promise 中异步完成。
推荐阅读
- java - 在 Java 中使用 SecureRandom
- amazon-web-services - 通过 CLI 删除 S3 存储桶中的空文件夹
- firebase - 服务器端迁移到 FCM,但客户端将在 2019 年 4 月 11 日之后将 GCM 与 InstanceID.getToken() 一起使用
- excel - Excel 查找和替换无法按预期工作
- gcc - __attribute__((io)), __attribute__((address)) 在 AVR 的 gcc 中似乎没有任何效果
- android - 无法读取 android 调试密钥
- loopback - 在 Quagga 中连接 eBGP 和 iBGP 路由器
- javascript - 使用 ReactQuill 库禁用任何用户输入
- c# - 如何在部分视图中获取浏览器查询字符串
- webpack - Webpack 4:无法解决符号链接模块的依赖关系