node.js - 如何确保一个异步函数在 NodeJS 中的另一个函数之前运行?
问题描述
我在 NodeJS 上运行服务器端脚本来更新数据库。我首先收集和总结现有字段,然后更新新字段。
const User = require('./models/user');
// Summarize
User.summarizeAllUsers();
// Update
User.updateAllUsers();
这些函数是异步的,因为我想等待获取所有用户的返回:
UserSchema.statics.summarize = async function() {
let users = await this.getAllUsers();
// ...
}
很明显,summarize()
可能会在之后运行update()
,我在日志中确认console.log()
确实如此。我的解决方案是将函数拆分为两个不同的脚本,但有时我会忘记同时运行这两个脚本。
如何将它们保存在一个脚本中并确保一个在另一个之前完成?
解决方案
在调用这些函数之前放置您的 await 语句并将它们包装在另一个异步函数中:
const User = require('./models/user');
async function doSomething() {
// Summarize
await User.summarizeAllUsers();
// Update
await User.updateAllUsers();
}
doSomething();
或者使用承诺并将updateAllUsers
调用放在then
调用中summarizeAllUsers
。不要忘记Try/Catch
用上面的方法来捕捉任何错误
推荐阅读
- sql - oracle中记录类型的关联数组
- regex - 删除我文件的所有部分,除了 [] 中的数据
- python - 在模板中使用 django-hosts host_url 进行 django 测试
- angular - Angular 将服务限制为仅一个组件树
- javascript - 带有对象数组的 ReactJS(逐个字符搜索)
- python - 如何修复我的错误处理代码?(tkinter 图形用户界面)
- laravel - 另一个表中的列总和 - laravel
- python - 我可以从 python 程序自动化这个经过 twilio 验证的电话号码列表吗
- python - 条带更新订阅python
- excel - 如何停止 Excel VBA workbook_open 事件?