首页 > 解决方案 > 如何确保一个异步函数在 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()确实如此。我的解决方案是将函数拆分为两个不同的脚本,但有时我会忘记同时运行这两个脚本。

如何将它们保存在一个脚本中并确保一个在另一个之前完成?

标签: node.jsasynchronousasync-await

解决方案


在调用这些函数之前放置您的 await 语句并将它们包装在另一个异步函数中:

const User = require('./models/user');
async function doSomething() {
// Summarize
await User.summarizeAllUsers();

// Update
await User.updateAllUsers();
}

doSomething();

或者使用承诺并将updateAllUsers调用放在then调用中summarizeAllUsers。不要忘记Try/Catch用上面的方法来捕捉任何错误


推荐阅读